如果JUnit测试失败,则停止测试

gywdnpxw  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(211)

我试图弄清楚我如何才能让我的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();
        }
    });
}
kmynzznz

kmynzznz1#

如果你正在使用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

drkbr07n

drkbr07n2#

我还没有做过Android应用程序的Junit测试,但根据我对Web应用程序的经验,我建议这个答案。
当我遇到这种情况时,我会在单独的方法中调用它们,并返回类型
示例:

public void testCheckFunctions()
{
boolean returnval=false;

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

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

q0qdq0h2

q0qdq0h23#

可以使用@MethodOrder更改jUnit 5中的测试顺序
如果你想有一个特定的顺序,你应该注解你的类使用OrderAnnotion

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderInJunit {

    @Test
    @Order(1)
    public void runsFirst() {
        System.out.println("runs first");
    }
    @Test
    @Order(2)
    public void runsSecond() {
        System.out.println("runs second");
    }

}

如果你想让一个测试在vanilla junit中连续的测试失败,你可以这样做:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
// One test instance per class, to keep the state of "previousTestFailed" between each test
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class OrderInJunit {

    private Boolean previousTestFailed = false;

    @Test
    @Order(1)
    public void runsFirst() {
        previousTestFailed = true;
        System.out.println("runs first");
        previousTestFailed = false;
    }

    @Test
    @Order(2)
    public void runsSecond() {
        Assumptions.assumeFalse(previousTestFailed,"No use to run this when \"runsFirst\" fails");
        previousTestFailed = true;
        System.out.println("runs second");
        fail("Test failure");
        previousTestFailed = false;
    }
    @Test
    @Order(3)
    public void runsThird() {
        Assumptions.assumeFalse(previousTestFailed,"No use to run this when \"runsSecond\" fails");
        previousTestFailed = true;
        System.out.println("runs second");
        previousTestFailed = false;
    }
}

这将始终导致:

但是,很明显,这种设置存在一些问题:
1.在jUnit中更改你不想做的命令
1.您可以为每个类而不是每个测试方法创建一个示例
1.因为你必须翻转previousTestFailed布尔值,并且你必须在每个测试中添加假设(除了第一个),所以它确实带有样板。
您可能希望查看更多特定于E2 E的测试框架或jUnit插件。

相关问题