在同一测试中使用多个TestRules

Cod*_*ice 4 android junit4 junit-rule

我已经编写了一个TestRule用于我的Android测试套件的自定义.它填充了受测试应用程序使用的数据库中的表.现在我需要用这个DataRule沿ActivityTestRule.我可以在我的测试类中注明两个字段@Rule吗?如何控制规则的应用顺序?

背景:

Android API提供了一个TestRule来启动一个Activity,它是每个带UI的应用程序的核心类.我的应用程序有一个数据库,我有几个测试,要求数据库预先填充一些已知的数据.以前,使用基于JUnit3的测试,我使用抽象超类来集中准备数据库的代码,然后我为不同的测试用例扩展了这个超类.现在我尝试使用JUnit 4实现相同的逻辑.我最近了解到测试规则是提供跨测试重用的逻辑的一种方式,所以我试图将逻辑从我的超类移到测试规则.这是实现我的目标的适当方式吗?

sis*_*hus 7

您当然可以@Rule在一次测试中拥有多个字段.我不确定规则应用程序的默认顺序是什么,或者它是否定义得很好.但是,如果排序很重要,您可以使用它来控制它,RuleChain 这允许您在测试用例中有多个规则时定义如何应用规则的顺序.

来自Javadoc ......

@Rule
public RuleChain chain = RuleChain
                           .outerRule(new LoggingRule("outer rule")
                           .around(new LoggingRule("middle rule")
                           .around(new LoggingRule("inner rule");
Run Code Online (Sandbox Code Playgroud)


Bis*_*ing 5

RuleChain 已弃用,从 4.13 开始,您可以在 Rule 中使用 order 参数。

org.junit.Rule 注释有一个参数“order”,您可以使用它来对一个文件中的规则进行排序。

检查下面链接中的文档

规则.java