Spock - @Subject 注释和实用程序 |正在测试的助手 class

Spock - @Subject annotation and util | helper class that's being tested

我有一个关于 Spock 中测试约定的问题。

假设我们有 A class 进行测试,这是使用静态方法的 util class。 测试它的经典方法是 A.method() 在每个测试方法中。

然而,在 Spock 中我们得到了 @Subject 注释(而且 Groovy 让我们这样做,即使说 class 有私有构造函数)我开始怀疑。

@Subject util = new A()

稍后在测试中我们将通过 util.method().

调用这些方法

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

您认为以这种方式进行测试有什么缺点吗?或者有什么更好的方法可以在 Spock 中干净地测试 util classes?

我看到冗长 @Subject 的优点,但实例化实用程序 class 会导致更多混乱。

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

Reports any new expressions which instantiate utility classes. Utility classes have all fields and methods declared static, and their presence may indicate a lack of object-oriented design. Instantiation of such classes most likely indicates programmer error.

  • 这是不自然的,可能会被其他开发人员认为是编程错误
  • 不遵守 private 关键字是不好的做法
  • Sonar、CodeNarc 和 IntelliJ 肯定会抱怨

我会选择 classic 方法或完全避免实用程序 classes。不过,这全都与惯例有关。