我正在实施一个测试自动化工具,我有一个扩展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)setUp()
2)test_one()
3)test_two()
4)tearDown()
有没有办法做这样的事情?
答案 0 :(得分: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确保它分别在测试运行之前和之后运行一次
答案 1 :(得分:0)
我最终遵循@beforeClass和@afterClass的想法。
但是我无法使用注释本身。相反,我在基类上实现了它们(通过使用计数器),我的测试套件继承自这个基类。
以下是我自己建立的链接:
我希望这可以帮助别人!