[英]Is there an alternative to mock objects in unit testing?
它是一個Java(使用JUnit)企業Web應用程序,沒有預先構建的模擬對象,並且需要花費大量時間來估計它們。 是否有測試范例可以給我“一些”測試覆蓋率,但不是總覆蓋范圍?
您是否嘗試過像EasyMock這樣的動態模擬框架? 它不需要你“創建”Mock對象,因為你必須編寫整個類 - 你在測試本身中指定你想要的行為。
使用UserService
查找有關用戶的詳細信息以便將某人記錄在其中的類的示例:
//Tests what happens when a username is found in the backend
public void testLoginSuccessful() {
UserService mockUserService = EasyMock.createMock(UserService.class);
EasyMock.expect(mockUserService.getUser("aUsername")).andReturn(new User(...));
EasyMock.replay(mockUserService);
classUnderTest.setUserService(mockUserService);
boolean isLoggedIn = classUnderTest.login("username");
assertTrue(isLoggedIn);
}
//Tests what happens when the user does not exist
public void testLoginFailure() {
UserService mockUserService = EasyMock.createMock(UserService.class);
EasyMock.expect(mockUserService.getUser("aUsername")).andThrow(new UserNotFoundException());
EasyMock.replay(mockUserService);
classUnderTest.setUserService(mockUserService);
boolean isLoggedIn = classUnderTest.login("username");
assertFalse(isLoggedIn);
}
我會回應其他人對EasyMock的看法。 但是,如果你有一個代碼庫,你需要模擬靜態方法調用,最終類或方法等等,那么給JMockit看看。
好吧,如果不是最簡單的方法,獲得高水平的代碼覆蓋率就是在測試驅動開發(TDD)之后編寫代碼測試優先。 現在代碼存在,沒有單元測試,它可以被視為遺留代碼。
你可以編寫端到端測試,在你的應用程序外部,那些不是單元測試,但它們可以編寫而不需要任何類型的模擬。 或者你可以編寫跨越多個類的單元測試,並且只模擬阻礙單元測試的類。
您是否擁有可導入測試平台的真實世界數據,以用作快速的“模擬對象”
我認為相反的情況很難 - 找到一種測試方法,可以在大多數情況下盡可能地提供全面覆蓋。
你應該試試EasyMock 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.