我在测试类上使用Spring的方便注释来进行集成测试。
@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我想现在还行,但是有没有办法组合这些注释,这样我就可以使用单个注释了吗?
发布于 2015-06-28 15:44:13
元注释不是代码重用的唯一方法。我们使用继承代替:
@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都理解来自基类的注释继承。
发布于 2015-06-28 15:14:50
好的,我在JUnit GitHub上找到了一些关于这个的旧讨论:
这是可读性和干性之间的某种权衡。
允许使用一些元注释也可以减缓IDE等工具的速度。
我似乎不认为它很快就要实现了,所以现在我必须保留我的两个注释。
https://stackoverflow.com/questions/31098138
复制相似问题