我已经编写了一个自定义TestRule
用于我的Android测试套件。它会在受测应用使用的数据库中填充一个表。现在我需要将此DataRule
与ActivityTestRule
一起使用.我可以用@Rule
注释测试类的两个字段吗?如何控制规则的应用顺序?
背景:
Android API 提供了一个用于启动 Activity 的 TestRule,这是每个具有 UI 的应用的核心类。我的应用程序有一个数据库,我有几个测试,这些测试要求数据库预先填充一些已知数据。以前,对于基于 JUnit3 的测试,我使用抽象超类来集中准备数据库的代码,然后我针对不同的测试用例扩展了这个超类。现在我正在尝试使用 JUnit 4 实现相同的逻辑。我最近了解到,测试规则是提供跨测试重用的逻辑的一种方式,因此我正在尝试将逻辑从我的超类移动到测试规则。这是实现目标的合适方式吗?
当然可以在单个测试中拥有多个@Rule
字段。我不确定规则应用程序的默认顺序是什么,或者它是否定义得很好。但是,如果订购很重要,您可以使用RuleChain
来控制它这允许您定义当测试用例中有多个规则时如何应用规则的顺序。
从爪哇文档...
@Rule
public RuleChain chain = RuleChain
.outerRule(new LoggingRule("outer rule")
.around(new LoggingRule("middle rule")
.around(new LoggingRule("inner rule");
链已被弃用,从 4.13 开始,您可以在 Rule 中使用 order 参数。
org.junit.Rule 注释有一个参数"order",您可以使用它对一个文件中的规则进行排序。
查看以下链接中的文档
规则.java
如果您使用 JUnit 进行测试(我个人建议这样做(,则不建议在同一文件中有多个规则,因为规则是测试的一个单元,并且在执行单元测试时,每个文件应该只有一个规则。
如果需要在运行测试之前创建某种数据,则应使用@Before,然后加载必要的信息。可以在此处找到有关此内容的更多信息:http://junit.sourceforge.net/javadoc/org/junit/Before.html
如果你必须在多个类中加载相同的数据,我建议你用你的逻辑创建一个类,在你的测试类中扩展该类,然后创建一个用@Before调用你的超类方法注释的方法。
希望有帮助