2012-05-04 43 views
4

我成功地在包含robotium-solo-3.2.1.jar的我的XXTest.java中編寫了兩個測試用例,幸運的是在JUnit視圖中顯示第一個完成,設備正好工作(在仿真器上)。兩個robotium測試用例,但第二個沒有響應(在JUnit視圖中)

然後進入第二個,但它只是永遠掛在那裏!對不起,我無法使用我的帳戶添加屏幕截圖。

這裏是我的代碼:

public class XXTest extends ActivityInstrumentationTestCase2<SignInActivity> { 

     private Solo solo; 
     private Activity mActivity; 
     private static final String account = "someone"; 
     private static final String pwd = "123456"; 

     @SuppressWarnings("deprecation") 
     public XXTest() { 
     super("com.acompany.android", SignInActivity.class); 
     } 

     protected void setUp() throws Exception { 
     super.setUp(); 
     this.mActivity = getActivity(); 
     solo = new Solo(getInstrumentation(), mActivity); 
     } 

     @Smoke 
     public void testLogIn() throws Exception { 

     EditText accountInput = (EditText) solo.getView(R.id.edit_account); 
     EditText pwdInput = (EditText) solo.getView(R.id.edit_password); 

     solo.clearEditText(accountInput); 
     solo.clearEditText(pwdInput); 

     solo.enterText(accountInput, account); 
     solo.enterText(pwdInput, pwd); 
     solo.clickOnButton(mActivity.getResources() 
      .getString(R.string.text_sign_in)); 

     solo.waitForActivity("MainActivity"); 
     solo.assertCurrentActivity("Expect MainActivity shown...", "MainActivity"); 
     boolean expected = true; 
     boolean actual = solo.searchButton(mActivity.getResources().getString(
      R.string.welcome_dialog_start)); 
     assertEquals("find friend dialog not shown", expected, actual); 
     } 

     @Smoke 
     public void testOpenPref() throws Exception { 

     solo.goBack(); 
     solo.clickOnMenuItem(mActivity.getResources().getString(
      R.string.text_preferences)); 
     solo.assertCurrentActivity("Expected PrefActivity..", "PrefActivity"); 

     solo.goBackToActivity("MainActivity"); 
     solo.assertCurrentActivity("Expected MainActivity..", "MainActivity"); 
     } 

     protected void tearDown() throws Exception { 
     super.tearDown(); 
     } 
} 

我從Robotium教程搜索NotePadTest.java的樣本,這3個測試案例中它只是做工精細!

請告訴我哪裏出了問題?我在某處錯過了什麼嗎?爲什麼第二個測試用例沒有運行?

btw。測試項目中是否可以有多個類擴展ActivityInstrumentationTestCase2?好奇!

回答

3

您需要在tearDown()中使用solo.finishOpenedActivities()。

+0

謝謝! @雷納斯,我明白了! 因此,一個測試類中的所有測試用例只能針對同一個android活動,對吧?如果我想要兩個測試用例針對兩個不同的活動呢? – Robert

+0

只要屬於同一應用程序,您就可以根據需要定位多個活動。 – Renas

+0

在tearDown()方法中添加solo.finishOpenedActivities()之後,應用程序在第一個測試方法之後被髮送到後臺,並重新啓動並立即再次發送到後臺,然後沒有任何反應。這是它應該工作的正常方式嗎? – Balaram

2

@Robert - 這是Activity測試本身的問題,而不是Robotium特有的。

對於第一種測試方法: 的基本流程你是象下面這樣: 1>在SETUP()方法加載的主要活動(比如MainActivity)>做一些OPS在testMethod1() - 的結果登陸你的其他活動(比如AnotherActivity)>和拆解()你殺的設置()方法,該方法是MainActivity

注意啓動的活動:但AnotherActivity仍然活

對於第二個測試方法: 的基本流程你是象下面這樣: 2>在SETUP()方法嘗試加載的主要活動(比如MainActivity)再次,儘管之前發射的AnotherActivity尚未得到殺害,所以它掛在那兒,它甚至犯規進入testMethod2()FR執行 -

注:日食圖形亞軍表明它掛起而執行的標誌點到testMethod2(),人們認爲它卡在testMethod2() - 但問題在於setUp()for testMethod2()不在testMethod2()本身。

解決方案: 1>只要保持在你的十字架活動導航一看 - 在每個TestMethod的結束()使用solo.goBack()從當前活動MainActivity回來相同的主要活動(您因爲你的行爲而登陸)

結果 - 在testMethod1()結束時,只剩下在setUP()中打開的主要活動。所以它被成功殺死了.No Activity仍然活着,對於testMethod2()。setUP()能夠在沒有掛起的情況下再次加載 - 並且testMethod2()被執行。

希望能夠澄清:)

相關問題