Как издеваться над источником свойства в весеннем тесте?

Я пишу модульные тесты для своего контроллера и столкнулся с проблемой, что файл desktop.properties не существует на моем сервере сборки и не должен там существовать.

У меня есть этот основной класс SpringBoot:

@Configuration
@ComponentScan(basePackages="com.xxx")
@EnableJpaRepositories(basePackages = "com.xxx")
@PropertySources(value = {@PropertySource("classpath:desktop.properties")})
@EnableAutoConfiguration(exclude={JmsAutoConfiguration.class, SecurityAutoConfiguration.class, MultipartAutoConfiguration.class})
@ImportResource(value = {"classpath:multipart.xml","classpath:column-maps-config.xml","classpath:model-ui-name-maps-config.xml"})
public class ApplicationConfig extends WebMvcConfigurerAdapter implements EnvironmentAware, WebApplicationInitializer {
}

Как вы можете заметить, этот класс импортирует desktop.properties.

И у меня есть тестовый класс, который начинается с:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfig.class)
@WebAppConfiguration
public class SomeControllerTest {
}

Если в моей среде нет файла desktop.properties или я просто удаляю его, тесты не могут быть запущены, потому что класс ApplicationConfig не может быть создан без зависимости.

Мой вопрос: как я могу смоделировать desktop.properties или создать пользовательскую конфигурацию для целей тестирования, чтобы заменить @ContextConfiguration(classes = ApplicationConfig.class) моим тестовым контекстом?

Не могли бы вы дать мне какие-нибудь намеки на этот счет?

P.S. текущий проект довольно старый со старыми версиями, поэтому я нашел только один способ создать тесты для контроллеров с минимальными изменениями в pom.xml


person Pasha    schedule 22.10.2018    source источник
comment
если наличие как можно меньшего количества изменений версий является для вас важным ограничением, то упоминание этих версий кажется существенным, чтобы ответить на ваш вопрос.   -  person jannis    schedule 22.10.2018


Ответы (3)


Вы можете попробовать эти тестовые аннотации:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfig.class)
@ActiveProfiles("test")
@WebAppConfiguration
public class SomeControllerTest {
}

Затем вам нужно создать определенные тестовые desktop.properties в /src/test/resources.

person leon cio    schedule 22.10.2018

Аннотация @TestPropertySource — это самый простой способ настроить источник свойств в интеграционных тестах Spring.

person Sam Brannen    schedule 23.10.2018
comment
Этот ответ действительно кажется наиболее подходящим ответом на заданный вопрос. Название аннотации говорит само за себя! - person Blake; 23.10.2018

Вы можете создать другой класс конфигурации для тестовой среды и использовать его в своем тесте. В этом классе конфигурации тестового приложения не будет оператора -

@PropertySourcel(value = {
@PropertySource("путь к классу:desktop.propertie s")})

И везде, где вы используете некоторые свойства из приведенного выше файла, используйте некоторые значения по умолчанию, чтобы не произошло сбоя с каким-либо исключением во время выполнения.

person Rahul Vedpathak    schedule 22.10.2018