tearDown()应该在每个测试之后运行吗?

5

我以为tearDown()方法应该在每个测试后运行,但是从日志中看到它是在setUp()方法之后开始运行的。你们能否澄清一下?

public class LaunchManagerActivityTest extends ActivityInstrumentationTestCase2<LaunchManagerActivity> {
    private Solo solo;

    public LaunchManagerActivityTest() {
        super(LaunchManagerActivity.class);

    }

    protected void setUp() throws Exception {
        super.setUp();
        Log.e("Dev", "setup");

        solo = new Solo(getInstrumentation(), getActivity());

    }

    protected void tearDown() throws Exception {
        super.tearDown();
        Log.e("Dev", "tearDown  ");

    }

输出:

02-11 11:33:33.095: E/Dev(26779): setup
02-11 11:33:34.395: E/Dev(26779): tearDown 

你没有测试用例,所以我认为这是可以预料的。 - R Kaja Mohideen
是的,它在每个testXXX方法之后被调用。可能你的测试只是没有输出任何东西。 - Mikhail Vladimirov
1
@RKajaMohideen 我认为他至少在超类中隐藏了一个测试用例。否则,setUptearDown都不会被调用。 - Mikhail Vladimirov
2个回答

8

您在发布的班级中没有测试,因此只会运行设置(setup)和拆卸(teardown)操作。这是预期的行为。如果您有任何测试,它将被执行:

constructor()
setUp();
testXXX();
tearDown();

如果您有两个测试,它就会运行。
constructor()
setUp();
testXXX();
tearDown();

setUp();
testXXX2();
tearDown();

请记住,在Junit 3中(Android使用的版本),测试必须以“test”单词开头,并且在同一个类中。

为了验证我所说的内容,请添加以下方法:

public void testXXX(){
    Log.d("Dev", "testXXX  ");
}

public void testXXX2(){
    Log.d("Dev", "testXXX2  ");
}

0

我猜这是JUnit3。tearDown在每个测试之后运行。你的测试文件中有任何测试吗?JUnit只会运行当前类中定义的测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接