Можно ли активировать весенний профиль в WebMvcTest

Учитывая тестовый класс, например:

@WebMvcTest
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
public class MyControllerTest  {
... some tests
}

Я получаю сообщение об ошибке:

java.lang.IllegalStateException: ошибка конфигурации: обнаружено несколько объявлений @BootstrapWith для тестового класса [com.example.MyControllerTest]: [@ org.springframework.test.context.BootstrapWith (value = class org.springframework.boot.test.autoconfigure .web.servlet.WebMvcTestContextBootstrapper), @ org.springframework.test.context.BootstrapWith (value = class org.springframework.boot.test.context.SpringBootTestContextBootstrapper)]

Желаемая цель состоит в том, чтобы я просто запускаю тест контроллера и, таким образом, из соображений производительности тестирования не хочу настраивать весь контекст - мне просто нужен «веб-слой».

Я могу удалить строку @SpringBootTest(properties = "spring.profiles.active=test"), однако сейчас я не активировал тестовый профиль, который может каким-то образом настраивать веб-контекст через свойства, например настройки Джексона, которые больше не будут применяться. Есть ли способ пройти тест только "веб-слоя" и при этом активировать профиль пружины?

Моя среда - java version "10.0.2" 2018-07-17, весенняя загрузка 1.5.16.RELEASE


person David    schedule 16.10.2018    source источник
comment
Возможно, здесь есть несколько вариантов, если вы не знали раньше   -  person Amit Phaltankar    schedule 17.10.2018
comment
Это хорошая статья, в которой показаны различные подходы к тестированию, но я не вижу ничего, связанного с этим.   -  person David    schedule 17.10.2018
comment
Что вы имеете в виду под activate a spring profile. Какой профиль пружины вы хотите активировать?   -  person Amit Phaltankar    schedule 17.10.2018
comment
Нестандартный. В данном случае он называется test. т.е. в пути к классам есть application-test.properties файл. Этот файл может выполнять такие действия, как установка параметров сериализации Джексона, которые могут изменять поведение приложения. С активированным профилем результат может отличаться от того, когда он не активирован, поэтому я хочу активировать его в тесте.   -  person David    schedule 17.10.2018


Ответы (1)


Чтобы установить активный профиль, вы можете использовать @ActiveProfiles, например

@WebMvcTest
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
public class MyControllerTest  {

тогда вы можете application-test yml или свойства в тестовых ресурсах.

person Amit Phaltankar    schedule 16.10.2018
comment
Если у вас есть компонент на основе профиля, он не будет создан. Например, у меня есть компонент, созданный в DEV, и тестовый профиль, и когда я запускаю ControllerTest с @WebMvcTest и @ActiveProfiles (тест), applicationContext не создает этот компонент. - person beinghuman; 12.01.2021