【发布时间】:2017-11-04 00:34:23
【问题描述】:
我有一个非常简单的测试类,用于在 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 方法?
【问题讨论】:
-
BeforeClass 每个类只执行一次。我相信您的测试有两个不同的课程
-
我也是这么想的,但
Wtf是我唯一的测试班,所以我很困惑。也许这与从 Android Studio 执行测试的方式有关? -
一些无关的东西:你不必使用
@RunWith(JUnit4.class)。
标签: java android junit junit4 android-espresso