2009-06-30 106 views
2

我在寫一些字符串的類中有一個方法,它調用了另一個方法。例如:如何在java中爲單元測試存根單個方法?

void foo() { 
    a += "xyx"; 
    bar(); 
} 

void bar() { 
    a += "abc"; 
} 

對於單元測試目的,我想單獨測試foo和bar。當我調用foo()或用其他方法替換它時,有沒有辦法阻止bar運行?

回答

8

創建一個覆蓋不執行任何操作的bar()的子類。

+0

客戶端代碼的外觀如何?你如何實例化現在覆蓋bar()的類。所以,你將不得不改變實例化新類的代碼(或工廠)。正如我下面所說的,我認爲我們需要更多關於這個問題的細節,具體來說,是否可以改變這個來源。 – 2009-06-30 21:43:47

1

你爲什麼要這麼做?您可以使用方面(不明智)在字節代碼級別攔截代碼;你可以拿一個叫bar的對象:void foo(MyBarObject m) { a += "xyx"; m.bar(); }

但是,正如我所說的,我想不出爲什麼這是有用的。單元測試旨在測試公共接口。如果bar()是私有的或受保護的,那麼它會通過你的調用和後來的斷言自動測試到foo()。如果foo()和bar()都是公共的,那麼酷,測試他們分離。

你能發表一個真實的例子嗎?你能改變被測試的代碼嗎?等

1

有人可能會爭辯說,上面的例子是不可測試的代碼。相反,如果代碼是:

void foo() { 
    a += "xyx"; 
} 

void bar() { 
    a += "abc"; 
} 

void fooBar() { 
    foo(); 
    bar(); 
} 

它很容易進行單元測試。