Для тестирования интеграции в приложении, в зависимости от того, что мы хотим проверить, у нас есть два отдельных профиля пружины, в которых используется H2 как встроенная база данных, а другая, которая использует MySQL как базу данных. Каждый профиль называется H2 и MYSQL, соответственно, для наших тестов у нас есть общий базовый класс, называемый WithJsonItResources, и мы хотим иметь возможность отбрасывать базу данных после каждого теста, так оно и есть на данный момент:Запуск различных операторов @Sql в зависимости от активного профиля с помощью теста Spring.
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb")
public abstract class WithJsonItResources extends WithJsonTestResources {
protected WithJsonItResources(Class resourcesForClass) {
super(resourcesForClass);
}
}
Как я могу добавить какой-то проверки или любой другой, так что, если профиль H2, он работает:
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP ALL OBJECTS DELETE")
И если это MYSQL профиль его работает:
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb")
Спасибо!
\ @IfProfileValue звучит немного как то, что Я ищу, но как я могу выбрать вызов \ @Sql из \ @IfProfileValue? Или строковое значение операторов из \ @Sql поддерживает динамическую инъекцию $ {value}? Как я дал конкретный пример класса, не могли бы вы поделиться конкретным решением, пожалуйста? благодаря! –
Барат, вводящий $ {value} свойства в аннотацию @Sql, не поддерживается, поэтому ваше предложение недействительно –
работает для меня @IfProfileValue (name = "test.database", value = "H2") \t @Sql (statements = "$ {$ {} test.database .statements}"). сохраненные свойства: test.database = H2 H2.statements = [DROP ALL OBJECTS DELETE] – Barath