Как смоделировать источник свойства в весеннем тесте? - PullRequest
0 голосов
/ 22 октября 2018

Я пишу модульные тесты для моего контроллера и столкнулся с проблемой, что файл 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) моим контекстом тестирования?

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

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

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

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

@ PropertySourcesl (value = {
@PropertySource ("classpath: desktop.propertie s")})

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

0 голосов
/ 23 октября 2018

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

0 голосов
/ 22 октября 2018

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

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

Далее вам нужно создать специальный тест desktop.properties в / src / test / resources

...