我对Spock的测试惯例提出了一个问题。
让我们说我们要测试 A 类,它是带有静态方法的util类。 测试它的经典方法是在每个测试方法中 A .method()。
然而,在Spock中我们得到了@Subject
注释(并且Groovy让我们这样做,即使所说的类有私有构造函数),我开始想知道。
@Subject util = new A()
稍后在测试中,我们将通过util.method()
调用方法。
通过这样做,我们将实现更清洁的测试。我们立即看到了正在测试的内容。在大多数IDE中,它都会突出显示。 @Subject
是非常详细的注释。
你认为做这样的测试有什么缺点吗?或者有更好的方法来清除Spock中的测试工具类吗?
答案 0 :(得分:1)
我看到使用详细@Subject
的优点,但实例化实用程序类会导致更多混乱。
检查IntelliJ关于实用程序类的实例化:
报告任何实例化实用程序类的新表达式。实用程序类将所有字段和方法声明为静态,它们的存在可能表明缺少面向对象的设计。这类的实例化很可能表示程序员错误。
private
关键字是不好的做法我会采用经典方法或完全避免使用实用程序类。尽管如此,这都是关于惯例的。