Я попытался загрузить второй файл свойств для своих модульных тестов, который переписал бы некоторые свойства.
Загрузка с помощью @PropertySource
на @Configuration
не работала, загрузка с помощью @TestPropertySource
didnтоже не работает.Работает только установка properties
непосредственно на @TesPropertySource
, но она НЕ работает, когда я пытаюсь превратить ее в метааннотацию.
Вот пример проекта: https://github.com/cptwunderlich/SpringTestProperties
Я бы предпочел загрузить один файл, чтобы повлиять на все тесты (например, с помощью @PropertySource
), но если это не сработает, по крайней мере, было бы неплохо иметь собственную метааннотацию, поэтому мне не нужно помещать это на каждый тест.В основном я хочу , а не импортировать некоторые данные в БД для тестов (spring.datasource.data), а затем также изменить используемую базу данных - без копирования всей конфигурации и необходимости каждый раз менять ее в двух местах..
Важные биты:
@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
public class TestconfigApplicationTests {
@Value("${my.test.property}")
private String testproperty;
@Test
public void assertValue() {
Assert.assertEquals("foobar", testproperty);
}
}
В качестве альтернативы класс конфигурации в пакете тестов :
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@PropertySource("classpath:application-test.properties")
public class GlobalTestConfig {
}
Обновление:
Основное предложение в ответах - использовать @ActiveProfile
для активации «тестового» профиля, что приведет к загрузке «application-test.yaml».Это лучше, чем @TestPropertySource
, но мне все еще нужно поместить аннотацию на каждый тестовый класс.Я попытался создать метааннотацию - которая должна работать - поэтому, по крайней мере, у меня есть только одна пользовательская аннотация, где я могу связать другие настройки.Но это не сработает.
Идеальное решение - установить эти параметры глобально с помощью одного класса конфигурации, вместо того, чтобы помещать аннотацию в каждый тест.Я все еще ищу это решение или, по крайней мере, отлаживаю метааннотацию перед закрытием этого вопроса. Редактировать: Я создал проблему Jira: SPR-17531
Редактировать
ОК, я немного запутался, поэтому я перепробовал все различные комбинации:
@TestPropertySource(locations = "classpath:application-test.properties")
на тесте, на самом деле работает сейчас.хах. @ActiveProfiles("test")
на Тестовые работы. - Мета-аннотация с
@ActiveProfiles
не работает не работает.РЕДАКТИРОВАТЬ: он делает ... - Глобальная конфигурация любого вида (TestPropertySource, ActiveProfiles, Propertysource) делает не работа
- (Наличие application.properties в test / resourcesтакже не работает, потому что он не перезаписывает отдельные свойства, но полный файл, т. е. мне нужно все переопределить и дублировать.)
РЕДАКТИРОВАТЬ:
ОК, моя ошибка.Мета-аннотация работает - я забыл установить политику хранения, и по умолчанию это CLASS.Добавление @Retention(RUNTIME)
исправляет это.
Не похоже, что есть способ глобально установить это в коде (т. Е. Без настройки в моей IDE того, как выполняются тесты), поэтому мне придется идтис профилем на данный момент.