Java JUnit TestCase对象实例化

Java JUnit TestCase对象实例化,java,junit,instantiation,testcase,Java,Junit,Instantiation,Testcase,是否使用TestCase对象的新(或不同)实例来运行JUnit测试用例中的每个测试方法?还是所有测试都重用一个实例 public class MyTest extends TestCase { public void testSomething() { ... } public void testSomethingElse() { ... } } 运行此测试时,创建了多少个MyTest类的实例 如果可能,请提供指向文档或源代码的链接,以便我验证行为。是的,将创建一个单独的实例 运行该测

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

public class MyTest extends TestCase {
  public void testSomething() { ... }
  public void testSomethingElse() { ... }
}
运行此测试时,创建了多少个
MyTest
类的实例


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

是的,将创建一个单独的实例

运行该测试时,将创建两个MyTest实例


如果您想要不同的行为,一个选项是使用一个类似的工具TestNG()。

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

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


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

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

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");
}

源代码(包括更新版本的源代码-您和我的示例是JUnit3)位于

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

感谢您的快速响应。您还可以提供一个指向文档或源代码的链接,我可以在其中验证此行为吗?您可以通过提供构造函数并向其中添加System.out.println来轻松验证它。@BeforeClass在JUnit 3中不可用。此处描述了一种等效物: