Может ли @WebMvcTest иметь два контроллера

Я пытаюсь протестировать два разных класса контроллеров. Поскольку я хочу протестировать по одному методу из обоих классов, и я буду использовать @WebMvcTest. Мой вопрос: есть ли способ внедрить макеты в оба класса, может быть что-то вроде этого?

@WebMvcTest(HomeController.class , BookController.class)
public class ControllerTest{

конечно, это дает ошибку, значит ли это, что при использовании @WebMvcTest мы можем тестировать только методы в одном контроллере? за класс


person valen ezu    schedule 24.01.2018    source источник


Ответы (1)


@WebMvcTest принимает Class<?>[] как value() :

public @interface WebMvcTest {
  ...
    @AliasFor("controllers")
    Class<?>[] value() default {};
  ...
}

Передача одного значения (возможно только потому, что это аннотация) или массива вполне легальна.
Ваша проблема в том, что вы используете неправильный синтаксис для объявления буквального массива.
Попробуйте:

@WebMvcTest({HomeController.class, BookController.class})
public class ControllerTest{

Обратите внимание, что, аннотируя свой тестовый класс с помощью @WebMvcTest без значения какого-либо параметра в объявлении аннотации:

@WebMvcTest
public class ControllerTest{

все контроллеры Spring добавляются в контекст Spring.

person davidxxx    schedule 24.01.2018
comment
когда мы используем аннотацию WebMvcTest, нам не нужно использовать аннотацию SpringbootTest @davidxxx Это правильно? - person valen ezu; 25.01.2018
comment
Конечно. Это альтернатива. Аннотация SpringBootTest загружает весь контекст (это делает тесты медленнее), в то время как аннотация WebMvcTest загружает только компоненты Mvc или то, что вы указали (это делает тесты быстрее). Вы можете прочитать stackoverflow.com/questions/39865596/ - person davidxxx; 25.01.2018
comment
это потому, что мне нужно добавить properties = classpath:application.properties к классу - person valen ezu; 25.01.2018
comment
если я хочу загрузить контекст из app.properties - person valen ezu; 25.01.2018
comment
@TestPropertySource (classpath:application.properties), может быть, я могу добавить это? потому что мне нужно application.properties, там определен bean-компонент - person valen ezu; 25.01.2018
comment
Вы можете добавить его. Но я думаю, что это, вероятно, не требуется. Spring должен учитывать это без необходимости указывать это. - person davidxxx; 25.01.2018