2017-11-04 113 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

相关问题