@Before
和分别各试验中,或在整个测试类之前@BeforeClass
运行,@Rule
和@ClassRule
包裹每一个测试,或者整个测试类,分别。
比方说,我需要每个测试方法之前初始化一些数据,
如何使用@Before
和@Rule
之间做出选择?在什么情况下比另一个更受欢迎?同样的问题也适用于@BeforeClass
与@ClassRule
。
@Before
和分别各试验中,或在整个测试类之前@BeforeClass
运行,@Rule
和@ClassRule
包裹每一个测试,或者整个测试类,分别。比方说,我需要每个测试方法之前初始化一些数据,
如何使用@Before
和@Rule
之间做出选择?在什么情况下比另一个更受欢迎?同样的问题也适用于@BeforeClass
与@ClassRule
。
事实上,正如@Quwin建议,accoridng到JUnit 4.12 API doc,
TestRule
可以做到这一点之前能够与@Before
,@After
,@BeforeClass
,或@AfterClass
注释 方法来做事,但TestRule
s为(1)更强大,和(2)项目和类之间更容易共享 。
方式是TestRule
s为更强大:
有已知的实施TestRule
班,其中有一些usefuls规则,你可以使用外的开箱,
有关如何这可能是有用的,看到这些提供TestRules,或写你自己的例子:
ErrorCollector
:在一个测试方法- 灵活断言
ExpectedException
收集多个错误:做出抛出的异常ExternalResource
:启动和停止服务器,例如TemporaryFolder
:创建新的文件,删除后测试TestName
:记得使用的测试名称的方法TestWatcher
期间:在活动方法E过程中添加逻辑xecutionTimeout
:原因测试的一组时间Verifier
后失败:如果对象状态结束了不正确
的规则的另一个好处失败测试,是多个规则可以在单一使用测试用例。您可能需要使用RuleChain
来指定规则应该运行的顺序。
建议可能的重复http://stackoverflow.com/questions/20295578,但该问题没有解决何时使用'@ Rule'与'@ Before' – sam