首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个Spring测试注释组合在一个注释中?

如何将多个Spring测试注释组合在一个注释中?
EN

Stack Overflow用户
提问于 2015-06-28 09:33:03
回答 2查看 4.6K关注 0票数 10

我在测试类上使用Spring的方便注释来进行集成测试。

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Config.class)
@IntegrationTest
@Sql({"classpath:rollback.sql", "classpath:create-tables.sql"})
@Transactional

我发现在每个测试类上复制/粘贴整个块非常难看,因此我创建了自己的@MyIntegrationTest注释。

代码语言:javascript
复制
@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将使用它的默认运行程序运行--这是不可取的。所以现在我必须使用两个注释。

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@MyIntegrationTest

我想现在还行,但是有没有办法组合这些注释,这样我就可以使用单个注释了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-28 15:44:13

元注释不是代码重用的唯一方法。我们使用继承代替:

代码语言:javascript
复制
@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都理解来自基类的注释继承。

票数 8
EN

Stack Overflow用户

发布于 2015-06-28 15:14:50

好的,我在JUnit GitHub上找到了一些关于这个的旧讨论:

这是可读性和干性之间的某种权衡。

允许使用一些元注释也可以减缓IDE等工具的速度。

我似乎不认为它很快就要实现了,所以现在我必须保留我的两个注释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31098138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档