我在寫一些字符串的類中有一個方法,它調用了另一個方法。例如:如何在java中爲單元測試存根單個方法?
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
對於單元測試目的,我想單獨測試foo和bar。當我調用foo()或用其他方法替換它時,有沒有辦法阻止bar運行?
我在寫一些字符串的類中有一個方法,它調用了另一個方法。例如:如何在java中爲單元測試存根單個方法?
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
對於單元測試目的,我想單獨測試foo和bar。當我調用foo()或用其他方法替換它時,有沒有辦法阻止bar運行?
創建一個覆蓋不執行任何操作的bar()的子類。
你爲什麼要這麼做?您可以使用方面(不明智)在字節代碼級別攔截代碼;你可以拿一個叫bar的對象:void foo(MyBarObject m) { a += "xyx"; m.bar(); }
但是,正如我所說的,我想不出爲什麼這是有用的。單元測試旨在測試公共接口。如果bar()是私有的或受保護的,那麼它會通過你的調用和後來的斷言自動測試到foo()。如果foo()和bar()都是公共的,那麼酷,測試他們分離。
你能發表一個真實的例子嗎?你能改變被測試的代碼嗎?等
有人可能會爭辯說,上面的例子是不可測試的代碼。相反,如果代碼是:
void foo() {
a += "xyx";
}
void bar() {
a += "abc";
}
void fooBar() {
foo();
bar();
}
它很容易進行單元測試。
客戶端代碼的外觀如何?你如何實例化現在覆蓋bar()的類。所以,你將不得不改變實例化新類的代碼(或工廠)。正如我下面所說的,我認爲我們需要更多關於這個問題的細節,具體來說,是否可以改變這個來源。 – 2009-06-30 21:43:47