3

我正在为接口的实现编写一个测试类,并希望针对另一个实现测试我的实现(即确保一致性)。然后,测试方法将测试每个接口方法以检查这一点。

为此,我可以:

a)创建private static原始实现和我的新实现的常量字段:

public class MyImplTest extends TestCase {

  private static OldImpl _original;
  private static MyImpl _myImpl;
  static {
    // instantiate _original and _myImpl
  }

  // My tests
}

b)创建private两个实现的字段,并使用以下方法实例化它们setUp()

public class MyImplTest extends TestCase {
  private OldImpl _original;
  private MyImpl _myImpl;

  public void setUp(){
    // instantiate _original and _myImpl
  }

  // My tests
}

这些是首选/被认为是好的风格吗?我的直觉建议 (b),但我想创建相当大的对象,并setUp()为 中的每个testSomething()方法运行TestCase,因此两者_original_myImpl都会被创建多次。

FWIW,我正在使用 JUnit 3。

4

1 回答 1

6

使用 setup 方法将导致初始化代码在每次测试之前运行。静态初始化器将在类首次加载时运行一次(并且只运行一次),这意味着它们在每次测试运行时只会执行一次。

为每个测试初始化​​所有内容通常是一个更好的主意,只是为了消除一个测试中任何对象的状态影响其他测试的能力。

我唯一一次发现使用静态初始化很有用是在我编写集成(而不是单元)测试时,而我的测试类的构建成本很高。我确信该对象是无状态的,因此测试不会相互干扰。如果您不确定,最好使用 setup() 方法以确保安全。

于 2012-05-10T14:23:04.123 回答