2013-03-13 65 views
2

我有一個Android應用程序,我正在進行單元測試。我有4個測試類,每個測試類都有多種測試方法。我從一個測試套件同時運行它們。我在模擬器上遇到了一個問題,在運行測試的過程中,測試會凍結。我切換到使用實際設備,問題就消失了。Android Junit測試凍結

快進了幾個星期,我在我的設備上運行測試時沒有遇到同樣的問題。過去幾天,我一直在Google上尋找解決方案,但沒有發現任何幫助。

的問題
當我嘗試運行所有測試的測試最終會凍結。凍結我的意思是測試本身凍結。我看到一個解決方案,它可能是電話或日食。我重新啓動了手機,更新了eclipse中的所有內容,包括eclipse本身。我試圖改變看法,看看也許日食視圖不刷新,但沒有任何幫助。我也嘗試使用junit v4庫而不是v3。

如果我單獨運行測試方法,它們都會運行並通過。只有當我從測試套件中運行它們時,它們纔會失敗。

日誌
我查了日誌,這就是我得到:
03-13 12:11:04.526: I/TestRunner(23175): started: testCheckShowDialogEnabled(com.package.name.MainActivityTest)

後面還有沒有別的在日誌中。

在設備上
該應用程序已完成並從屏幕上刪除。它在下次測試開始時不會重新打開。

代碼
這是我認爲可能相關的代碼。如果你需要更多的代碼,請讓我知道。

public class AllTests extends TestSuite { 
    public static Test suite() { 
     TestSuite suite = new TestSuite(); 

     suite.addTestSuite(MainActivityTest.class); 
     suite.addTestSuite(DatabaseHandlerTest.class); 
     suite.addTestSuite(ClassOneTest.class); 
     suite.addTestSuite(AnotherActivityTest.class); 

     return suite; 
    } 
} 

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { 

    public MainActivityTest() { 
     super("com.package.name", MainActivity.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 


     mMainActivity = getActivity(); 
     mSolo = new Solo(getInstrumentation(), mMainActivity); 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     super.tearDown(); 

     mMainActivity = null; 
    } 
    // all the test methods 
} 

我所有的測試類實現setup()tearDown()類似。

任何人都知道爲什麼我的測試保持凍結?任何幫助或建議非常感謝。

+0

看看這個https://groups.google.com/forum/?fromgroups=#!topic/robotium-developers/5i3YoyYFpWE – smk 2013-03-13 17:41:58

+0

我在我的tearDown()中試過這個,現在eclipse中的JUnit視圖出現仍然在第二個測試方法被凍結。但是現在在大約一秒的時間內,我得到了一個開始的測試,完成了測試,並通過了所有測試方法的測試日誌條目。 – 2013-03-13 19:31:53

+0

如果測試真的可以很快運行,我可以相信日誌,但是我從來沒有讓這些測試快速運行。通常完成它們需要幾分鐘的時間 – 2013-03-13 19:34:04

回答

3

@smk指出我找到解決方案。我只是改變了我的tearDown()這樣:

@Override 
protected void tearDown() throws Exception { 
    mSolo.finishOpenActivities(); 
    super.tearDown(); 
} 

現在,它的偉大工程!