【问题标题】:Stopping Test's if JUnit Test fails如果 JUnit 测试失败则停止测试
【发布时间】:2013-03-18 15:48:31
【问题描述】:

我正在试图弄清楚如何让我的 JUnits 测试按特定顺序运行,以及如果其中一个测试失败则停止所有测试。下面我只包含了一些简单的操作栏项目测试。我基本上要确保的是,当我通过命令行运行构建/测试时,如果其中一个测试失败,我希望测试停止。有什么建议吗?

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();
        }
    });
}

【问题讨论】:

  • 你打破了 Junit 的基本原则之一——所有测试都应该相互独立。一个好的测试类应该有可以按任何顺序执行的测试,并且它们之间没有依赖关系。
  • 有一个pretty nifty example from IBM DeveloperWorks 使用自定义套件来完成此操作。您还可以使用 Ant 运行测试,它在 Junit 任务上有一个属性,可以让您在失败时停止。
  • @Perception 谢谢你,你知道那个属性可能叫什么吗?
  • Ant JUnit 任务中,您要查找的属性称为haltonfailure

标签: java android unit-testing junit android-webview


【解决方案1】:

如果您使用 JUnit 进行集成测试,您可以在方法名称前加上 _1、_2 等:

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

我想您可以调用 System.exit() 而不是抛出异常,但是如果您的测试花费的时间太长,这可能是将来添加更多测试的坏兆头(添加更多测试可能会阻止您运行他们)。

如果你使用的是 ant,你可以试试这个:How to make junit testing to stop after first failing test

【讨论】:

    【解决方案2】:

    我还没有为 Android 应用程序做过 Junit 测试,但根据我对 Web 应用程序的经验,我建议这个答案。

    当我遇到这种情况时,我会在单独的方法中调用它们并返回类型

    例子:

    public void testCheckFunctions()
    {
    boolean returnval=false;
    
    returnval=test1();
    if(returnval)
    {
    returnval=test2();
    }
    if(returnval)
    {
    returnval=test3();
    }
    }
    

    如果上述任一条件失败,您可以退出测试。

    【讨论】:

    • 感谢您的回复,我会考虑到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多