我正在为接口的实现编写测试类,并希望针对另一个实现测试我的实现(即确保一致性)。然后测试方法将测试每个接口方法以检查它。
要做到这一点,我可以:
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
1}}会被多次创建。
FWIW,我正在使用JUnit 3。
答案 0 :(得分:5)
使用setup方法将导致初始化代码在每次测试之前运行。首次加载类时,静态初始值设定项将运行一次(并且仅运行一次),这意味着每次测试运行时它们只会执行一次。
为每个测试初始化所有新鲜事物通常是一个更好的主意,只是为了消除影响其他测试的一个测试中任何对象的状态的能力。
我发现使用静态初始化有用的唯一一次是当我编写集成(而不是单元)测试时,我的测试类构建起来很昂贵。我确信该对象是无状态的,但测试不会相互干扰。如果您不确定,最好使用setup()方法来保证安全。