Как объединить много аннотаций Spring test в одну аннотацию?
я использую удобные аннотации Spring Boot для своих тестовых классов для интеграционных тестов.
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
я нашел довольно уродливым копировать / вставлять весь этот блок в каждом тестовом классе, поэтому я создал свой собственный @MyIntegrationTest
аннотации
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:database-scripts/rollback.sql", "classpath:database-scripts/create-tables.sql", "classpath:database-scripts/insert-test-data.sql"})
@Transactional
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyIntegrationTest {
}
однако, если я добавить @RunWith(SpringJUnit4ClassRunner.class)
в моей новой аннотации JUnit будет работать со своим бегуном по умолчанию , что нежелательно.
Поэтому сейчас я должен использовать две аннотации.
@RunWith(SpringJUnit4ClassRunner.class)
@MyIntegrationTest
Я думаю, что сейчас это нормально, но есть ли способ объединить эти аннотации, чтобы я мог использовать одну аннотацию?
2 ответов
мета-аннотации-не единственный способ повторного использования кода. Вместо этого мы используем наследование:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
abstract class IntegrationTest {
}
class FooTest extends IntegrationTest {
}
class BarTest extends IntegrationTest {
}
В отличие от мета-аннотаций, наследование аннотаций от базовых классов понимается как Spring, так и JUnit.
хорошо, поэтому я нашел несколько старых дискуссий об этом на JUnit GitHub:
Это своего рода компромисс между удобочитаемостью и сухостью.
разрешение некоторых мета-аннотаций также может замедлить работу таких инструментов, как IDEs.
Я не кажется, что это на пути к реализации любого время скоро, так что пока мне придется сохранить мои две аннотации.