【发布时间】:2013-02-17 11:38:40
【问题描述】:
我的测试有很多共同的逻辑,所以我决定通过扩展来分享它。我写了两个类:TestNumberOne,它扩展了TestBase。
TestBase.java
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
/**
* @author Pavel
* @since 2013-03-03
*/
public class TestBase {
@BeforeClass
public static void beforeClass() {
System.out.println("beforeClass() in TestBase");
System.out.flush();
}
@AfterClass
public static void afterClass() {
System.out.println("afterClass() in TestBase");
System.out.flush();
}
@Before
public void before() {
System.out.println("before() in TestBase");
System.out.flush();
}
@After
public void after() {
System.out.println("after() in TestBase");
System.out.flush();
}
}
TestNumberOne.java
import org.junit.*;
/**
* @author Pavel
* @since 2013-03-03
*/
public class TestNumberOne extends TestBase {
@Test
public void anyTest() {
System.out.println("anyTest() in TestNumberOne");
System.out.flush();
}
}
我在执行测试时得到了如此奇怪的输出:
before() in TestBase
anyTest() in TestNumberOne
after() in TestBase
beforeClass() in TestBase
afterClass() in TestBase
为什么它有这么奇怪的顺序?是否有任何扩展 JUnit 测试类的约定?
更新:
- 测试在 IDEA 中运行
- 为了得到如此奇怪的结果,我运行了好几次(其他结果符合预期)
【问题讨论】:
-
如何“打印姓名和班级名称”?是否正在进行缓冲?
-
我使用简单的
System.out.pringln(...)。我猜缓冲正在进行,但无论如何它必须保持它在缓冲中的顺序。 -
BeforeClass/AfterClass方法是静态的吗?编辑您的帖子以包含 Java。 -
无论如何,我在每次输出后都添加了
flush()调用...但是输出是一样的 -
不继承静态方法。它们仅属于 TestBase。不是 TestNumberOne。
标签: java unit-testing intellij-idea junit4