我正在尝试使用Espresso和Cucumber编写自动UI测试。到目前为止,我已成功执行使用ActivityTestRule
测试单个活动的功能的步骤定义。我使用Cucumber的@Before
注释来准备场景,例如启动所需的活动。问题在于,当我尝试执行包含多个功能定义的测试套件时,将在每个方案之前调用所有@Before
块。例如,当检测核心开始执行方案1时,它会在方案1和方案2中执行@Before
方法,从而导致重叠活动启动和测试失败。
public class Activity1Stepdefs {
@Before
public void setUp() {
// Called before both scenario 1 and scenario 2, needs to be called only before scenario 1.
}
@Given("^scenario 1$")
public void scenario_1() throws Throwable {
// Scenario 1
}
}
public class Activity2Stepdefs {
@Before
public void setUp() {
// Called before both scenario 1 and scenario 2, needs to be called only before scenario 2.
}
@Given("^scenario 2$")
public void scenario_2() throws Throwable {
// Scenario 2
}
}
产生的控制流程:
Activity1Stepdefs.setUp()
Activity2Stepdefs.setUp()
Activity1Stepdefs.scenario_1()
Activity2Stepdefs.setUp()
Activity1Stepdefs.setUp()
Activity2Stepdefs.scenario_2
所需的控制流程:
Activity1Stepdefs.setUp()
Activity1Stepdefs.scenario_1()
Activity2Stepdefs.setUp()
Activity2Stepdefs.scenario_2
答案 0 :(得分:1)
这可以通过标记的钩子来实现。首先在特征文件中为方案1和2分配标记,然后创建标记的钩子,如下所示。
假设我已经将方案1和2的标签名称分别命名为scen1和scen2。
before ("@scen1")
public void scenarioOneSetup()
{ // code for scenario 1 setup }
before ("@scen2")
public void scenarioTwoSetup()
{// code for scenario 2 setup}