@BeforeClass和@AfterClass在每次测试之前和之后调用

我有一个非常简单的测试类,用于在Android上运行espresso测试,如下所示:

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方法?

事实certificate这是由于Android Test Orchestrator :

每个测试都在自己的Instrumentation实例中运行。 因此,如果您的测试共享应用程序状态,则在每次测试后,大部分共享状态将从设备的CPU或内存中删除。

我不知道如何绕过它,但至少现在我知道它为什么会发生。

我只是尝试在eclipse和@AfterClass中运行你的代码,而@BeforeClass只根据Junit文档运行一次(附带截图)。

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

在此处输入图像描述