JUnit TestCase对象实例化

时间:2008-10-08 01:53:58

标签: java junit instantiation testcase

是否使用TestCase对象的新(或不同)实例在JUnit测试用例中运行每个测试方法?或者一个实例被重用于所有测试?

public class MyTest extends TestCase {
  public void testSomething() { ... }
  public void testSomethingElse() { ... }
}

在运行此测试时,会创建多少MyTest个类的实例?

如果可能,请提供指向我可以验证行为的文档或源代码的链接。

5 个答案:

答案 0 :(得分:8)

是的,创建了一个单独的实例。

在运行该测试时,会创建2个MyTest实例。

如果您想要不同的行为,可以选择使用名为TestNG(http://testng.org/doc/)的类似工具。

答案 1 :(得分:4)

我无法在JUnit文档中找到关于您的问题的明确答案,但正如anjanb所写,其意图是每个测试都独立于其他测试,因此可以为每个测试创建一个新的TestCase实例运行

如果您希望在测试类中的所有测试用例中共享昂贵的测试设置(“ fixtures ”),则可以使用 @BeforeClass 注释在静态方法上实现此结果:http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html。但请注意,仍然可以为每个测试创建一个新实例,但这不会影响@BeforeTest方法初始化的静态数据。

答案 2 :(得分:3)

每次测试运行都有一个实例。尝试

public class MyTest extends TestCase {
  public MyTest() { System.out.println("MyTest Constructor");
  public void setUp() { System.out.println("MyTest setUp");
  public void tearDown() { System.out.println("MyTest tearDown");
  public void testSomething() { System.out.println("MyTest testSomething");
  public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}

源代码(包括新版本的代码 - 您和我的示例是Junit 3)位于http://www.junit.org

答案 3 :(得分:2)

如果您因为担心数据在构造函数中被初始化和重新初始化而提出这个问题,请注意初始化测试用例数据的规定方法是通过setUp()和tearDown()专门。

答案 4 :(得分:0)

是的,当然。我发现由于这种设计,我在测试之间无法访问存储在实例变量中的数据。