Java单元测试 - 常量字段与setUp()

ama*_*ent 2 java junit unit-testing

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

要做到这一点,我可以:

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

public class MyImplTest extends TestCase {

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

  // My tests
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  // My tests
}
Run Code Online (Sandbox Code Playgroud)

是这些首选/被认为是好的风格?我的直觉建议(B),但我想创造相当大的物体,并setUp()获取运行每个testSomething()的方法TestCase,这样既_original_myImpl将被创建多次.

FWIW,我正在使用JUnit 3.

Jes*_*ebb 5

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

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

我发现使用静态初始化有用的唯一一次是当我编写集成(而非单元)测试时,我的测试类构建起来很昂贵.我确信该对象是无状态的,但测试不会相互干扰.如果您不确定,最好使用setup()方法是安全的.