2013-03-18 192 views
2

我想弄清楚如何讓我的JUnits測試運行特定的順序以及停止所有的測試,如果其中一個測試的失敗。下面我介紹了一些簡單的操作欄項目測試。所有我基本上想確保當我通過命令行運行我的構建/測試時,如果其中一個測試失敗,我希望測試停止。任何建議?停止測試,如果JUnit測試失敗

public void testPreconditions() { 
    assertNotNull(instrumentation); 
    assertNotNull(mWeb); 
    assertNotNull(mActivity); 
} 

protected void setUp() throws Exception { 
    super.setUp(); 

    instrumentation = getInstrumentation(); 
    mActivity = getActivity(); 
    setActivityInitialTouchMode(false); 
    mWeb = (WebView) mActivity 
      .findViewById(com.jaisonbrooks.webview.R.id.webview_main); 
    mMockWebViewClient = new MockWebViewClient(); 
    mWeb.setWebViewClient(mMockWebViewClient); 
    mSettings = mWeb.getSettings(); 
} 

public void testThatButtonReloadWorks() { 
    final View view = mActivity 
      .findViewById(com.jaisonbrooks.webview.R.id.menu_refresh); 
    mActivity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      view.requestFocus(); 
      view.callOnClick(); 
     } 
    }); 
} 

public void testThatButtonForwardWorks() { 
    final View view = mActivity 
      .findViewById(com.jaisonbrooks.webview.R.id.menu_forward); 
    mActivity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      view.requestFocus(); 
      view.callOnClick(); 
     } 
    }); 
} 

public void testThatButtonBackWorks() { 
    final View view = mActivity 
      .findViewById(com.jaisonbrooks.webview.R.id.menu_back); 
    mActivity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      view.requestFocus(); 
      view.callOnClick(); 
     } 
    }); 
} 
+1

你打破了Junit的基本原則之一 - 所有的測試都應該是相互獨立的。一個好的測試類應該有可以以任何順序執行的測試,並且它們之間沒有依賴關係。 – planetjones 2013-03-18 15:53:26

+0

也見http://stackoverflow.com/questions/3693626/how-to-run-test-methods-in-spec-order-in-junit4 – planetjones 2013-03-18 15:55:06

+0

有一個[非常漂亮的例子來自IBM DeveloperWorks](https:/ /www.ibm.com/developerworks/mydeveloperworks/blogs/amcohen/entry/stop_junit_before_you_get_into_trouble3?lang=en)使用自定義套件來完成此操作。你也可以用Ant來運行你的測試,Ant在Junit任務上有一個屬性,可以讓你在失敗時停下來。 – Perception 2013-03-18 15:56:18

回答

1

如果你正在使用JUnit做集成測試,你可以用_1,_2等:

public void _1_testThatButton()... 
public void _2_testSomethingSecond()... 

我想你可以調用System.exit()而不是拋出前綴的方法名一個例外,但是如果你的測試時間過長,那麼未來添加更多測試可能是一個不好的跡象(增加更多的測試可能會阻止你運行它們)。

如果your're使用螞蟻,你可以試試這個:How to make junit testing to stop after first failing test

1

我沒有做JUnit測試Android應用程式,但根據我的web應用程序的經驗,我建議這個答案。

當過我面對這樣的情況,我會返回類型叫他們在不同的方法

例子:

public void testCheckFunctions() 
{ 
boolean returnval=false; 

returnval=test1(); 
if(returnval) 
{ 
returnval=test2(); 
} 
if(returnval) 
{ 
returnval=test3(); 
} 
} 

如果上述任何條件未能您可以退出測試。

+0

感謝您的回覆,請考慮這一點。 – 2013-03-18 16:05:53