Spockの魅力を広げようとしています。実際にはGroovyクラスの単体テストを作成しようとしましたが、Javaに呼び出すユニットテストを作成しようとしました。静的メソッドはプライベートコンストラクタを呼び出します。コードは次のようになります。SpockモックでJavaコンストラクタを使うことができます
private MyConfigurator(String zkConnectionString){
solrZkClient = new SolrZkClient(zkConnectionString, 30000, 30000,
new OnReconnect() {
@Override
public void command() { . . . }
});
}
"SolrZkClient"はサードパーティ(Apache)Javaライブラリからのものです。 ZooKeeperに接続しようとしているので、ユニットテストの一環として内部テストを実行するのではなく、このユニットテストを模擬したいと思います。
私のテストは問題なくコンストラクタに取得しますが、私はそのCTORを乗り越えることはできません。
def 'my test'() {
when:
MyConfigurator.staticMethodName('hostName:2181')
then:
// assertions
}
これを行うには、とにかくはありますか?
感謝のピーターは、非常に '常識'のアドバイスのようです。この答えを実践に移すことを遅らせることは問題であった。少量のコードでも調べるのはなぜかを示しています。このクラスの目的は、SolrCloud設定の根底にある詳細を隠す抽象クラスにすることです。それらの詳細を抽象化するために、必要なのはconnectStringだけです。したがって、クラスが隠そうとしているオブジェクトを渡すことは、実際の選択肢ではありません。今日これ以上の時間を費やして、私は再びコメントします。 – JoeG
2番目のコンストラクタを追加できないのはなぜですか? –
それはカプセル化を壊すでしょう - クラスの目的の1つは、SolrZkClientの構造を隠すことです。 – JoeG