2011-08-18 157 views
1

我有这样的代码:JUnit TestCase功能如何实际工作?

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

JUnit会实例化的类(MyTest的)每个测试一次,然后执行这些方法

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

直到它运行所有以测试开始并且没有收到任何参数的方法。所以在你的例子中,Junit会实例化MyTest两次。您可以在JUnit documentation中阅读更多关于此的内容。

请记住,这是编写测试的旧方法。从Junit 4(我认为)首选的方法是使用注释。您可以查看注释文档here。作为一个说明,NUnit重用了测试的实例,因此在同一场景中,它只会实例化MyTest一次。

1

JUnit会根据测试方法实例化一次这个类,所以在上面的代码中只有一次,但是用两种测试方法再试一次,你会看到它实例化了两次。如果你想在某些状态下保存一些状态而不需要使用静态,请看TestNG,它将所有测试方法重复使用同一个实例。

+0

感谢您对TestNG的评论。我会看看! – kaneda