2013-11-03 34 views
1

調用的代碼編寫測試代碼。如果我有兩個類:ClassA和ClassB,我應該爲其他測試代碼

ClassA的調用上的ClassA ClassB的即公共方法:

public function foo() 
{ 
    $this->classB->bar(); 
} 

我的測試覆蓋富 - 但我應該始終編寫測試覆蓋B級還吧?

鑑於代碼直接進行測試im不知道這是否值得嗎?

+0

相關提示,也看到了[得墨忒耳定律( http://en.wikipedia.org/wiki/Law_of_Demeter) –

回答

0

是的,你應該測試吧。你所有的課都應該有自己的測試用例,在這裏你測試他們的公共方法。因此,對於classB,您應該有一個單獨的測試用例,您可以在其中測試方法欄()。

原因是當方法bar()(或bar()調用的classB的另一個方法)發生錯誤時,測試將在方法foo()中失敗,這可能會導致更多的錯誤並導致更多在方法欄()中找到實際的錯誤。在你的例子中,這可能不是一個問題,但在現實世界中,你測試更復雜的代碼。

另一個原因是測試的複雜性。你的測試應該在所有可能的情況下測試你的方法。可以說,函數bar()可以在5種不同的情況下被測試,並且foo()也可以在它自己的5種情況下被測試。如果你只測試foo(),你將不得不寫一個測試來覆蓋5 * 5 = 25的情況。如果foo()更復雜,並且調用另一個方法,讓我們說classB-> bar2()以及另外5種不同的情況,那麼您將不得不編寫一個覆蓋5 * 5 * 5 = 125個例子的測試!編寫3個測試比echach更容易5個例子,而1個測試覆蓋125個例子。而那3個測試也會更容易閱讀和維護。

0

是的,寫測試。否則,classB :: bar()不可重複使用(或者甚至不可用)。

如果bar是ClassA的私有方法,則不需要。

1

另一種看待它的方式是根據班級的責任。
這個責任是應該用測試來聲明的。

類可以是ClassA的或ClassB的等
寫測試斷言一類的責任
寫測試斷言B類的職責

再加上認爲會有一個依賴和對象映射
您自然地覆蓋您的依賴關係的測試,然後更高的對象圖追蹤到根

總之
B類需要測試
A類依賴於B類的某些功能需要自己

注意的測試:他們每個人的責任/能力會有所不同

相關問題