如何理解@Test和@BeforeClass?

use*_*070 2 java junit junit4

我从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) {
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

Ral*_*und 16

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

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

  • @BeforeClass:在课前的任何其他测试之前都会被罚款.
  • @Before:在运行一个测试之前直接执行,对于任何@Test注释方法,它将被调用一次.
  • @Test:测试本身,您可能在应用程序中以这种方式注释了几种方法.
  • @After:执行测试后,独立于任何错误或失败.将有几个执行,一个用于任何@Test注释方法.
  • @AfterClass:在执行了这个类的任何测试后,

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