Spock - @Subject注释和util |正在测试的助手类

时间:2015-04-24 22:14:06

标签: unit-testing groovy spock

我对Spock的测试惯例提出了一个问题。

让我们说我们要测试 A 类,它是带有静态方法的util类。 测试它的经典方法是在每个测试方法中 A .method()。

然而,在Spock中我们得到了@Subject注释(并且Groovy让我们这样做,即使所说的类有私有构造函数),我开始想知道。

@Subject util = new A()

稍后在测试中,我们将通过util.method()调用方法。

通过这样做,我们将实现更清洁的测试。我们立即看到了正在测试的内容。在大多数IDE中,它都会突出显示。 @Subject是非常详细的注释。

你认为做这样的测试有什么缺点吗?或者有更好的方法来清除Spock中的测试工具类吗?

1 个答案:

答案 0 :(得分:1)

我看到使用详细@Subject的优点,但实例化实用程序类会导致更多混乱。

检查IntelliJ关于实用程序类的实例化:

  

报告任何实例化实用程序类的新表达式。实用程序类将所有字段和方法声明为静态,它们的存在可能表明缺少面向对象的设计。这类的实例化很可能表示程序员错误

  • 它不自然,可能被其他开发人员视为编程错误
  • 违反private关键字是不好的做法
  • Sonar,CodeNarc和IntelliJ绝对会抱怨

我会采用经典方法或完全避免使用实用程序类。尽管如此,这都是关于惯例的。