2017-01-31 16 views
1

Для тестирования интеграции в приложении, в зависимости от того, что мы хотим проверить, у нас есть два отдельных профиля пружины, в которых используется 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") 

Спасибо!

ответ

0

вы можете использовать @Profile или @IfProfileValue решить, включен ли H2 или MYSQL.

Don `T также жесткий код заявление вместо чтения его из application.properties и решить ее с помощью @value на основе активного профиля

Doc: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html

+0

\ @IfProfileValue звучит немного как то, что Я ищу, но как я могу выбрать вызов \ @Sql из \ @IfProfileValue? Или строковое значение операторов из \ @Sql поддерживает динамическую инъекцию $ {value}? Как я дал конкретный пример класса, не могли бы вы поделиться конкретным решением, пожалуйста? благодаря! –

+0

Барат, вводящий $ {value} свойства в аннотацию @Sql, не поддерживается, поэтому ваше предложение недействительно –

+0

работает для меня @IfProfileValue (name = "test.database", value = "H2") \t @Sql (statements = "$ {$ {} test.database .statements}"). сохраненные свойства: test.database = H2 H2.statements = [DROP ALL OBJECTS DELETE] – Barath

 Смежные вопросы

  • Нет связанных вопросов^_^