7
試圖擴大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,我想嘲笑這個單元測試(而不是在內部作爲單元測試的一部分運行)。
我的測試變得毫無困難的構造,但我不能讓過去那個構造函數:
def 'my test'() {
when:
MyConfigurator.staticMethodName('hostName:2181')
then:
// assertions
}
反正有沒有做到這一點?
感謝彼得,似乎是非常'常識'的建議。推遲接受這個答案,因爲將其付諸實踐一直存在問題。即使是少量代碼的檢查也能說明原因。該類的目的是成爲隱藏SolrCloud配置底層細節的抽象。爲了「抽象出」這些細節,我需要的只是一個connectString。因此,通過對象類試圖隱藏並不是一個真正的選擇。今天會花更多時間在此,我會再次發表評論。 – JoeG
爲什麼你不能添加第二個構造函數? –
這會破壞封裝 - 這個類的目的之一是隱藏SolrZkClient的構造,而不是將它傳遞給調用鏈。 – JoeG