2017-11-04 123 views
0

我有一個非常簡單的測試類運行在Android上咖啡的測試,看起來像這樣:@BeforeClass和@AfterClass前和每次測試後稱爲

import android.util.Log; 

import org.junit.After; 
import org.junit.AfterClass; 
import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.ClassRule; 
import org.junit.Test; 
import org.junit.rules.ExternalResource; 
import org.junit.runner.RunWith; 
import org.junit.runners.JUnit4; 

import java.io.IOException; 

@RunWith(JUnit4.class) 
public class Wtf { 

    private static class TestResources extends ExternalResource { 
     protected void before() { 
      println("before() TestResources"); 
     } 
     protected void after() { 
      println("after() TestResources"); 
     } 
    } 

    @ClassRule 
    public static final TestResources res = new TestResources(); 

    @BeforeClass 
    public static void setUpClass() { 
     println("@BeforeClass setUpClass()"); 
    } 

    @AfterClass 
    public static void tearDownClass() throws IOException { 
     println("@AfterClass tearDownClass()"); 
    } 

    private static void println(String string) { 
     Log.d("wow", Wtf.class.getSimpleName() + ": " + string); 
    } 

    @Before 
    public void setUp() { 
     this.println("@Before setUp()"); 
    } 

    @After 
    public void tearDown() throws IOException { 
     this.println("@After tearDown()"); 
    } 

    @Test 
    public void test_1() { 
     this.println("@Test test1()"); 
    } 

    @Test 
    public void test_2() { 
     this.println("@Test test2()"); 
    } 
} 

和輸出是這樣的:

D/wow: Wtf: before() TestResources 
D/wow: Wtf: @BeforeClass setUpClass() 
D/wow: Wtf: @Before setUp() 
D/wow: Wtf: @Test test1() 
D/wow: Wtf: @After tearDown() 
D/wow: Wtf: @AfterClass tearDownClass() 
D/wow: Wtf: after() TestResources 
D/wow: Wtf: before() TestResources 
D/wow: Wtf: @BeforeClass setUpClass() 
D/wow: Wtf: @Before setUp() 
D/wow: Wtf: @Test test2() 
D/wow: Wtf: @After tearDown() 
D/wow: Wtf: @AfterClass tearDownClass() 
D/wow: Wtf: after() TestResources 

但是我希望在整個班級運行之後調用一些東西。難道我做錯了什麼?爲什麼在每次測試之前和之後調用@BeforeClass和@AfterClass方法?

+0

BeforeClass每個類只執行一次。我相信你有兩個不同的課程供你測試 –

+0

這就是我的想法,但'Wtf'是我唯一的測試課,所以我很困惑。也許這與如何從Android Studio執行測試有關? – argo49

+0

不相關的東西:你不必使用'@RunWith(JUnit4.class)'。 –

回答

0

事實證明,這是由於Android Test Orchestrator

每個測試在其自己的儀表實例中運行。因此,如果您的測試共享應用程序狀態,那麼每次測試後,大部分共享狀態都會從設備的CPU或內存中移除。

我不知道它的方式,但至少現在我知道它爲什麼會發生。

0

我只是試圖在eclipse中運行你的代碼,並且@AfterClass和@BeforeClass根據Junit文檔(附加屏幕截圖)只運行一次。

​​

enter image description here

+1

感謝您試用不同的機器!這是我期待的輸出。至少現在我知道我並不瘋狂,它必須是我的構建設置中的某些東西奇怪。 – argo49

相關問題