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 回呼び出されます。実行前に 1 回、実行test_one()後にもう1 回test_two()。これは、2 つのメソッドの両方を実行した後に呼び出されます。

ここでやりたいことは、すべてのBaseTestsテストを実行するために setUp() メソッドと TeaDown() メソッドを 1 回だけ呼び出すことです。したがって、メソッド呼び出しの順序は次のようになります。

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 は、テスト実行の前後にそれぞれ 1 回だけ実行されることを保証します

于 2014-07-22T17:02:54.120 に答える