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

标签 java unit-testing junit

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

为此我可以:

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。

最佳答案

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

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

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

关于Java 单元测试 - 常量字段与 setUp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535988/

相关文章:

ruby-on-rails - 用回形针挂起的 Rspec 测试

java - 链表测试....返回类型问题

java - 在 Maven 构建中并行运行 junit 测试?

java - 在执行junit时如何将参数传递给Spring MVC Controller 中的post方法?

Java:将两个BigInteger对象分成一个BigDecimal对象

java - 为什么从 Char Array 创建的 String 没有被 interned?

java - 正确的单元测试属性持有者没有平等的实现

java - 尽管所有测试都通过了,Intellij 报告断言失败

java - @SOAPBinding(style = Style.RPC) 用于返回 ArrayList 的 Web 方法

java - 反射(reflection) Groovy 脚本中声明的函数