2013-03-18 144 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