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。不过,这全都与惯例有关。
我有一个关于 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。不过,这全都与惯例有关。