9

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

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

运行此测试时,创建了多少类实例MyTest

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

4

5 回答 5

8

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

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

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

于 2008-10-08T01:55:43.380 回答
4

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

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

于 2008-10-08T02:58:50.367 回答
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

于 2008-10-08T04:12:41.997 回答
2

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

于 2008-10-08T01:59:13.157 回答
0

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

于 2010-07-08T14:38:26.643 回答