回答
一類沒有構造函數有一個隱含的公共的無參數的構造函數,是的,只要它不是最終的,也可以是子類。
如果類只有私有構造函數則沒有,它不能。
有問題的類只有私有構造函數,包括無參數的構造函數,所以我想我只是運氣不好。 – 2009-06-17 01:05:13
看起來這個類在測試方面不是非常友好。你真的應該使用接口,而不是concerete類型... – 2009-06-17 01:19:03
如果java類沒有任何定義的構造函數,那麼對你來說沒有問題。如果類將定義任何構造函數,並且它們都將隱藏給您(私有),則問題將爲此。
如果只有私有構造函數,你仍然可以使用,以便反映,以便能夠從類外部訪問它們。
您可以通過反射更改可見性修改器。 Here is an article listing how。
已回答問題,但要添加評論。這通常是提出將代碼編寫爲可測試的好時機。
不要做一個關於它的痛苦,研究什麼需要(可能是依賴注入至少),瞭解寫作模擬考試,並提出一套合理的指導方針,允許類更有用。
我們只是重新寫了一堆單身的使用DI,而不是因爲單身是出了名的難嘲笑。
這可能不是一個好,但編碼可測性的某種程度是最專業的店標。
是的,你可以嘲笑的對象,雖然它可能不能夠繼承它(當然不是沒有得到非常親密的類加載器,反正)。 Here是你如何使用JMock來完成的。
以這種方式嘲弄可以讓你保持的類型,沒有子雖然它可能會挺難不可能弄清只有某些行爲。因此,此方法適用於測試使用此類的類,而不適用於測試類本身。
如果你實際上可以訪問類的源代碼,你可以實現一個允許你擴展它的內部類,但是如果你可以這樣做的話,你也可以使其中一個構造函數也是私有的。
也有動態語言,這將允許你做的子類,並實現一個Java接口,Java代碼可以交互,但我不那麼熟悉的細節。
您可以模擬類,和其任何或所有構造函數,用JMockit。
這是一個Java的嘲弄工具包,它可以讓你嘲笑任何事情。 即使該類不公開和/或嵌套,它仍然可以被模擬。 JMockit中有幾種機制可用於此目的。工具箱發行版也包含大量的示例JUnit測試。
如果類實現了某個接口或擴展了一個抽象類,那麼您可以告訴JMockit根據需要「捕獲」並基本類型的模擬實現,因爲它們由JVM加載,甚至將創建的實例分配給測試類中的字段。
- 1. php擴展,但有一個新的構造函數...可能嗎?
- 2. java,擴展類與主類的構造函數有參數
- 3. 沒有名字的Java構造函數?
- 4. 有沒有可能在特質中有構造函數?
- 5. 沒有構造函數的C#類
- 6. Java中擴展類的構造函數
- 7. DatabaseException:類缺少一個沒有參數的構造函數
- 8. 在python中有沒有可能從構造函數中調用一個classmethod?
- 9. 如何構造類的構造函數可能有多個參數或模板中沒有?
- 10. 註冊一個沒有默認構造函數的類型
- 11. 有沒有在JAVA中執行超類的構造函數之前的子類的構造函數?
- 12. cglib:沒有構造函數的類的Java動態代理(HttpUrlConnection)
- 13. 匿名類型有沒有參數的構造函數?
- 14. C#可能有一個抽象類中的構造函數?
- 15. 沒有參數的構造函數或參數構造函數
- 16. 有一個子類的構造函數
- 17. 有沒有在clojure中構造一個lambda函數?
- 18. 沒有擴展
- 19. 類的構造函數不能沒有「新」來調用
- 20. 類不能做沒有空構造函數的序列化
- 21. 是否有可能擴展一個庫類擴展MY_Controller類
- 22. Jython說「沒有可見的類構造函數」
- 23. 爲什麼Inet * Address類沒有可見的構造函數?
- 24. 是否有可能有一個構造函數的參數作爲類名C++?
- 25. 沒有適當的默認構造函數可用並且沒有默認的構造函數
- 26. 沒有空的構造函數
- 27. 沒有默認的構造函數
- 28. 沒有構造函數的實例C++
- 29. C++ - 沒有匹配的構造函數
- 30. NHibernate映射,沒有空的構造函數和沒有setter
問題是,它可以被嘲笑,不可以被分類,考慮到接受的答案,也許你應該改變這個問題,如果這是你的意思? – Yishai 2009-06-17 14:38:44
我的問題明確詢問可擴展性。它只提到嘲笑作爲希望這種可擴展性的原因。 – 2009-06-17 18:08:53