2014-07-22 47 views
0

我正在實現一個測試自動化工具,並且我有一個擴展了InstrumentationTestCase的類。例如:爲每個測試套件運行setUp()和tearDown()方法InstrumentationTestCase Android

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測試中,設置()方法被調用的2倍。在執行test_one()之前一次以及在test_two()之後執行另一次。 tearDown()會發生同樣的情況,在執行這兩種方法之後調用它。

我想在這裏做的是隻調用setUp()和tearDown()方法一次執行所有BaseTests測試。因此,方法調用的順序將是這樣的:

1)設置()

2)test_one()

3)test_two()

4)TEARDOWN()

有沒有辦法做這樣的事情?

+0

我寧願不改變這種行爲,但你可以有一個布爾值,指示何時第一對setUp/tearDown被調用。這些回調被稱爲讓您在每次測試開始前設置環境並在測試結束後清理它。 – Blackbelt

回答

1

我通過解決此問題:

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

和:

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

,而不是設置()和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確保它會之前只運行一次,並在測試運行分別

+0

感謝您的答覆。但添加這樣的註釋使我的構建突破。我應該輸入其他東西嗎? –

+0

是的,我忘記了進口。你應該導入:import org.junit.AfterClass; import org.junit.BeforeClass; – cristianorbs

+0

我現在可以建立,謝謝提醒我進口..但它仍然交替打印每個測試的setUp和tearDown ..我不知道這是否發生,因爲我擴展InstrumentationTestCase –

相關問題