2

我正在实现一个测试自动化工具,并且我有一个扩展InstrumentationTestCase. 例如:

public class BaseTests extends InstrumentationTestCase {

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        Log.d(TAG, "setUp()");
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
        Log.d(TAG, "tearDown()");
    }

    public void test_one() {
        Log.d(TAG, "test_one()");
    }

    public void test_two() {
        Log.d(TAG, "test_two()");
    }
}

当我运行 的测试时BaseTests, setUp() 方法被调用了 2 次。执行前一次,执行test_one()后一次test_two()。tearDown() 也会发生同样的情况,它在执行这两种方法后调用。

我想在这里做的是只调用一次 setUp() 和 tearDown() 方法来执行所有BaseTests测试。所以方法调用的顺序如下:

1) 设置()

2) test_one()

3) test_two()

4) 拆解()

有没有办法做这样的事情?

4

2 回答 2

2

我使用以下方法解决了这个问题:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

和:

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

而不是 setUp() 和 tearDown()。因此,在您的情况下,它将是:

import org.junit.AfterClass;
import org.junit.BeforeClass;
public class BaseTests extends InstrumentationTestCase {

@BeforeClass
protected static void setUp() throws Exception { 
    //do your setUp
    Log.d(TAG, "setUp()");
}

@AfterClass
protected static void tearDown() throws Exception {
    //do your tearDown
    Log.d(TAG, "tearDown()");
}

public void test_one() {
    Log.d(TAG, "test_one()");
}

public void test_two() {
    Log.d(TAG, "test_two()");
}
}

注解@BeforeClass 和@AfterClass 确保它在测试运行之前和之后分别只运行一次

于 2014-07-22T17:02:54.120 回答
0

我最终遵循了@beforeClass 和@afterClass 的想法。

但是我不能使用注释本身。相反,我在一个基类上实现了它们(通过使用计数器),我的测试套件继承自这个基类。

这是我自己做的链接:

https://android.googlesource.com/platform/frameworks/base/+/9db3d07b9620b4269ab33f78604a36327e536ce1/test-runner/android/test/PerformanceTestBase.java

我希望这可以帮助别人!

于 2014-07-23T12:06:42.627 回答