2011-05-16 70 views
1

如果方法A()調用靜態方法B(),這是不好的,因爲兩者緊密耦合,是否正確?具體實例方法與靜態方法一樣不好測試,對嗎?

但是,如果不是調用B(),A()稱爲某個具體類的非靜態方法C(),那麼這對測試同樣不好,是否正確?因爲現在A()被耦合到擁有C()的具體類別。

當使用接口(即,依賴注入)時,唯一的好方案發生,並且A()調用接口的方法。

我有權利嗎?有沒有其他原因靜態方法不好測試?

回答

2

第一種情況是「壞」,因爲它很難交換B()被調用。

第二種情況可能不是很糟糕,因爲根據你如何獲得擁有C()的類的實例,你可能可以將該對象換成另一個(比如子類)。

第三種情況通常是「最好的」,因爲它允許您更容易地更改A()的實現,但只有在沒有提供A()的具體類的硬編碼構造時纔是如此(即,只有在依賴注入實際上是使用)。

+0

謝謝澄清。 – 2011-05-16 05:08:57

0

這取決於語言。例如,在像Java這樣的語言中調用具體類的實例方法對於測試根本沒有任何壞處,因爲可以生成該具體類的代理實例,從而可以有效地攔截(並且典型地嘲笑)調用。事實上,許多框架使用這個代理工具在用戶代碼之前/之後注入他們自己的代碼,以提供依賴注入和AOP支持等功能。

相關問題