我熟悉TDD的基本原則,是:當虛擬和實際實現都有接口時,單元測試的最佳方法是什麼?
- 編寫測試,這些都將失敗,因爲沒有實現
- 寫的基本實現使測試通過的
- 重構代碼
不過,我有點困惑,其中接口和實現契合。我創建在我的業餘時間一個Spring Web應用程序,而非在令人眩目的打算,我想知道我怎麼能測試接口/實現更好一點,拿我在這裏創建了這個簡單的例子代碼:
public class RunMe
{
public static void main(String[] args)
{
// Using a dummy service now, but would have a real implementation later (fetch from DB etc.)
UserService userService = new DummyUserService();
System.out.println(userService.getUserById(1));
}
}
interface UserService
{
public String getUserById(Integer id);
}
class DummyUserService implements UserService
{
@Override
public String getUserById(Integer id)
{
return "James";
}
}
我創建了UserService
界面,最終會出現這種實際的實現,將查詢數據庫,但爲了獲取應用程序掉在地上,我取代的DummyUserService
實現,只返回現在有一些靜態數據。
問:我怎樣才能爲實現上述測試策略?
我可以創建一個名爲DummyUserServiceTest
和測試,當我打電話getUserById()
它會返回James
測試類,看起來很簡單,如果不是浪費時間(?)。
隨後,我還可以創建一個測試類RealUserService
,測試getUserById()
從數據庫返回用戶名。這是混淆了我咯,這樣做的部分,這難道不是本質上超越單元測試的邊界,變得更加的一體化試驗(與數據庫命中)的?
問題(改進了一點):當使用虛擬/樁樁接口和實際實現時,哪些部分應該進行單元測試,哪些部分可以安全地保持未測試?
我花了幾個小時,昨晚在這個題目谷歌搜索,而且大多發現任何教程,什麼是TDD,或者如何使用JUnit的例子,但在沒有什麼建議應實際測試的領域。這完全有可能,但我沒有足夠努力地搜索或者沒有找到正確的東西...