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

JUnit @Rule vs @Rule
EN

Stack Overflow用户
提问于 2017-04-03 19:54:55
回答 2查看 17.3K关注 0票数 50

我明白,

  • @Before@BeforeClass分别在每个测试或整个测试类之前运行。
  • @Rule@ClassRule分别包装每个测试或整个测试类。

假设我需要在每个测试方法之前初始化一些数据,

如何在使用@Before @Rule**?之间作出决定?在什么情况下,一种比另一种更可取?**同样的问题也适用于@BeforeClass@ClassRule

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-04 00:57:37

为了使用@Rule,您需要一个实现TestRule(首选)或MethodRule的类,可以读取这里。虽然@Before@After需要在每个测试用例中编写一个新的方法,但是@Rule并不是因为它只是已经存在的代码的实例化。

因此,如果您在许多测试用例中将@Before@After用于setUp()tearDown(),那么使用@Rule实际上是一个更好的主意,因为有code reuse。如果您有一个需要唯一的@Before和/或@After的测试用例,那么这些注释更好。

关于几个例子的更详细的答案,请看一下这里。阿吉特解释得很好。

票数 42
EN

Stack Overflow用户

发布于 2017-04-04 15:41:32

的确,正如@Quwin所建议的,根据JUnit 4.12 API文档的说法,

TestRule可以完成以前可以用@Before@After@BeforeClass@AfterClass注释的方法完成的所有任务,但是TestRule(1)更强大,(2)更容易在项目和类之间共享。

TestRule更强大的方式

有一些已知的TestRule实现类,它们是一些有用的规则,您可以开箱即用,

有关这方面如何有用的示例,请参阅这些提供的TestRules,或编写您自己的:

  • ErrorCollector:在一个测试方法中收集多个错误
  • ExpectedException:对抛出的异常进行灵活的断言
  • ExternalResource:启动和停止服务器,例如
  • TemporaryFolder:创建新文件,并在测试后删除
  • TestName:记住在方法中使用的测试名称
  • TestWatcher:在方法执行期间在事件中添加逻辑
  • Timeout:导致测试在设定时间后失败
  • Verifier:如果对象状态不正确,则失败测试

规则的另一个好处是可以在一个测试用例中使用多个规则。您可能希望使用RuleChain来指定运行规则的顺序。

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

https://stackoverflow.com/questions/43193188

复制
相关文章

相似问题

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