2

我从 JUnit 开始,不理解注释@Test@BeforeClass.
我有以下代码:

public class Toto { 
@BeforeClass
    public static void setupOnce() {
        final Thread thread = new Thread() {
            public void run() {
                Main.main(new String[]{"-arg1", "arg2"});
            }
        };
        try {
            thread.start();
        } catch (Exception ex) {
        }
    }

为什么@BeforeClasssetupOnce()在这种情况下,和线程是什么?我们应该在每个 Java 测试之前
添加吗? 那么如果我有 30 个 Java 测试,我应该在每个 Java 文件中都有吗?@Test
@Test public void test()

4

1 回答 1

16

@BeforeClass 注解标识了一个方法,该方法应该在此实现单元中包含的任何测试用例之前执行。在这种特殊情况下,此测试类包含一些线程资源的初始化,需要在测试期间在后台执行。

JUnit 定义了四个生命周期事件:

  • @BeforeClass:在执行该类的任何其他测试之前。
  • @Before:在运行 ONE 测试之前直接执行,对于任何带有 @Test 注释的方法,它将只被调用一次。
  • @Test:测试本身,您的应用程序中可能有几种以这种方式注释的方法。
  • @After:测试执行后,与任何错误或失败无关。将有几个执行,一个用于任何 @Test 注释方法。
  • @AfterClass:在执行了此类的任何测试之后,

在我的应用程序中,我通常使用 @BeforeClass 注释方法执行昂贵的初始化,而真正昂贵的初始化甚至只为整个测试套件执行一次。但是这个“事件”是基于一些加速我的发展的黑客行为。

于 2010-03-04T20:48:36.130 回答