2017-06-05 129 views
0

我正在尝试使用Espresso和黄瓜编写自动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 
    } 
} 

所得控制流程:

  1. Activity1Stepdefs.setUp()
  2. Activity2Stepdefs.setUp()
  3. Activity1Stepdefs.scenario_1()
  4. Activity2Stepdefs.setUp()
  5. Activity1Stepdefs.setUp()
  6. Activity2Stepdefs.scenario_2

期望的控制流量:

  1. Activity1Stepdefs.setUp()
  2. Activity1Stepdefs.scenario_1()
  3. Activity2Stepdefs.setUp()
  4. Activity2Stepdefs.scenario_2
+0

这是hook之前的正常行为。如果你想在钩子之前使用不同的。然后在场景之前将其转换为步骤定义,并将其作为特性文件中的故事线添加到场景中。如果你想要不同的行为,不要在场景之前使用。 – Murthi

+0

但我不断看到人们在'@ Before'钩子中启动活动的示例,如下所示:https://stackoverflow.com/a/36012553/5963217所以我想我的问题是:什么是准备用户界面的正确位置那么测试呢?我真的不希望我的功能被设置逻辑污染。 – Julsteri

回答

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}