首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Junit @Rule和@ClassRule

Junit @Rule和@ClassRule
EN

Stack Overflow用户
提问于 2016-12-13 21:00:42
回答 3查看 34.6K关注 0票数 49

我正在编写使用TemporaryFolder规则的JUnit4测试。它似乎与@Rule和@ClassRule都能很好地工作。Junit @Rule和@ClassRule有什么区别?为什么我应该使用一个而不是另一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-13 21:25:06

当一个类中有多个测试方法时,这种区别就变得很明显了。

一个@ClassRule在任何测试方法之前运行它的before()方法。然后运行所有测试方法,最后运行规则的after()方法。因此,如果一个类中有五个测试方法,before()after()仍然只运行一次。

@ClassRule适用于静态方法,因此具有其固有的所有限制。

@Rule通过规则的apply()方法运行测试,该方法可以在运行目标方法之前和之后执行某些操作。如果您有五个测试方法,则规则的apply()将被调用五次,作为每个方法的包装器。

使用@ClassRule设置可供所有测试方法重用的内容,前提是可以在静态方法中实现这一点。

使用@Rule为每个测试方法设置需要创建新的或重置的内容。

票数 95
EN

Stack Overflow用户

发布于 2016-12-13 21:17:25

无法将@Rule设置为在@BeforeClass之前运行。

而@ClassRule必须在静态方法上。

票数 3
EN

Stack Overflow用户

发布于 2018-03-23 18:26:50

Ref:注释引用规则或返回它们的方法的静态字段。字段必须是公共的、静态的,并且是TestRule的子类型。方法必须是公共静态的,并且返回TestRule的子类型。

传递给TestRule的语句将运行任何BeforeClass方法,然后运行测试类的整个主体(如果是标准JUnit测试类,则运行所有包含的方法;如果是套件,则运行所有包含的类),最后运行所有AfterClass方法。

https://junit.org/junit4/javadoc/4.12/org/junit/ClassRule.html

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

https://stackoverflow.com/questions/41121778

复制
相关文章

相似问题

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