2017-06-05 127 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}