如何将许多 Spring 个测试注释组合到一个注释中?
How to combine many Spring test annotations in a single annotation?
我在我的测试中使用 Spring Boot 方便的注释 classes,用于集成测试。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
我发现每次测试 copy/paste 整个块都很难看 class,所以我创建了自己的 @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 将 运行 及其默认的 运行ner - 这是不可取的。
所以现在我必须使用两个注释。
@RunWith(SpringJUnit4ClassRunner.class)
@MyIntegrationTest
我想现在没问题,但是有没有办法组合这些注释,这样我就可以使用单个注释了?
好的,所以我在 JUnit 上发现了一些关于此的旧讨论 GitHub:
这是可读性和 DRY-ness 之间的某种权衡。
允许一些元注释也可能会降低 IDE 等工具的速度。
我认为它不会很快实施,所以现在我必须保留我的两个注释。
元注释不是代码重用的唯一方式。我们改用继承:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
public abstract class IntegrationTest {
}
public class FooTest extends IntegrationTest {
}
public class BarTest extends IntegrationTest {
}
与元注释不同,Spring 和 JUnit 都可以理解从基础 类 继承的注释。
我在我的测试中使用 Spring Boot 方便的注释 classes,用于集成测试。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
我发现每次测试 copy/paste 整个块都很难看 class,所以我创建了自己的 @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 将 运行 及其默认的 运行ner - 这是不可取的。
所以现在我必须使用两个注释。
@RunWith(SpringJUnit4ClassRunner.class)
@MyIntegrationTest
我想现在没问题,但是有没有办法组合这些注释,这样我就可以使用单个注释了?
好的,所以我在 JUnit 上发现了一些关于此的旧讨论 GitHub:
这是可读性和 DRY-ness 之间的某种权衡。
允许一些元注释也可能会降低 IDE 等工具的速度。
我认为它不会很快实施,所以现在我必须保留我的两个注释。
元注释不是代码重用的唯一方式。我们改用继承:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional
public abstract class IntegrationTest {
}
public class FooTest extends IntegrationTest {
}
public class BarTest extends IntegrationTest {
}
与元注释不同,Spring 和 JUnit 都可以理解从基础 类 继承的注释。