我正在实现一个测试自动化工具,并且我有一个扩展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()
之后。 TeaDown() 也会发生同样的情况,它在执行这两个方法中的每一个之后调用。
我在这里想做的是仅调用一次 setUp() 和tearDown() 方法来执行所有 BaseTests
测试。所以方法调用的顺序如下:
1) 设置()
2) test_one()
3) test_two()
4)tearDown()
有办法做到这样吗?
最佳答案
我通过使用以下方法解决了这个问题:
@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确保它在测试运行之前和之后分别只运行一次
关于android - 为每个测试套件运行setUp()和tearDown()方法InstrumentationTestCase Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893248/