JUnit TestCase功能如何实际工作?

时间:2011-08-18 21:59:51

标签: testing junit

我有这样的代码:

public class MyTest extends TestCase {
    private MyObject mObject1;
    private MyObject mObject2;
    ...
    @Override
    public void setUp() throws Exception {
        super.setUp();
    }
    public void testSomething() {
        mObject1 = new MyObject();
        mObject2 = new MyObject();
    }
    public void testSomething2() {
      // Here I can't access the previously created objects mObject1 and 
      // mObject2, because they are again null. 
      // Why is that, if *my* setUp() method doesn't touch them?
    }

我的猜测是JUnit每次都会再次实例化该类。有人可以解释一下工作流程吗?

感谢。

2 个答案:

答案 0 :(得分:2)

JUnit将在每次测试时实例化一次类(MyTest),然后执行方法

  • 设置()
  • 的testXXX()
  • TEARDOWN()

直到它运行以测试开头并且不接收任何参数的所有方法。所以在你的例子中,Junit将实例化两次MyTest。您可以在JUnit documentation

中详细了解相关信息

请记住,这是编写测试的旧方法。从Junit 4(我认为)首选的方法是使用注释。您可以查看注释文档here

作为附注,NUnit重用了测试的实例,因此在同一场景中,它只会实例化一次MyTest。

答案 1 :(得分:1)

JUnit将为每个测试方法实例化一次此类,因此在上面的代码中只有一次,但是使用两种测试方法再次尝试它,您将看到它实例化两次。如果要在字段中保存某些状态而不必使用静态,请查看TestNG,它为所有测试方法重用相同的实例。