Joe*_*oeG 8 java groovy unit-testing spock
试图扩大Spock在工作中的吸引力并遇到这个问题.实际上尝试为Groovy类编写单元测试,但是要调用Java.静态方法调用私有构造函数.代码如下:
private MyConfigurator(String zkConnectionString){
solrZkClient = new SolrZkClient(zkConnectionString, 30000, 30000,
new OnReconnect() {
@Override
public void command() { . . . }
});
}
Run Code Online (Sandbox Code Playgroud)
"SolrZkClient"来自第三方(Apache)Java库.因为它试图连接到ZooKeeper,我想为这个单元测试嘲笑它(而不是在内部运行一个作为单元测试的一部分).
我的测试毫无困难地进入构造函数,但我无法通过那个ctor:
def 'my test'() {
when:
MyConfigurator.staticMethodName('hostName:2181')
then:
// assertions
}
Run Code Online (Sandbox Code Playgroud)
反正有没有这样做?
Pet*_*ser 10
由于被测试的类是用Groovy编写的,因此您应该能够通过全局Groovy Mock/Stub/Spy来模拟构造函数调用(请参阅Spock参考文档中的Mocking Constructors).但是,更好的解决方案是将类的实现解耦,以使其更易于测试.例如,您可以添加第二个构造函数和/或静态方法,以允许传递实例(或基本接口,如果有的话).然后你可以轻松传入模拟.MyConfiguratorSolrZkClient