6

我已经编写了一个自定义TestRule来与我的 Android 测试套件一起使用。它在被测应用程序使用的数据库中填充一个表。现在我需要将它DataRuleActivityTestRule. 我的测试类的两个字段可以用 注释@Rule吗?如何控制应用规则的顺序?

背景:

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

4

3 回答 3

11

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

从Javadoc...

@Rule
public RuleChain chain = RuleChain
                           .outerRule(new LoggingRule("outer rule")
                           .around(new LoggingRule("middle rule")
                           .around(new LoggingRule("inner rule");
于 2016-02-13T13:01:59.947 回答
5

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

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

检查下面链接中的文档

规则.java

于 2019-06-11T11:42:40.077 回答
0

如果您使用 JUnit 进行测试(我个人建议),则不建议在同一个文件中包含多个规则,因为规则是您的测试单元,并且在您进行单元测试时,您应该只每个文件一个规则。

如果您需要在运行测试之前创建某种数据,您应该使用@Before,然后加载必要的信息。更多信息可以在这里找到:http: //junit.sourceforge.net/javadoc/org/junit/Before.html

如果您必须在多个类中加载相同的数据,我建议您使用您的逻辑创建一个类,在您的测试类中扩展该类,然后创建一个使用 @Before 注释的方法,调用您的超类方法。

希望有帮助

于 2016-02-12T23:33:20.553 回答