場景 1:使用 jMock 模擬接口
測試 ServiceClass 類中的服務方法十分簡單。假定測試要求為證明 runService() 方法并未運行 —— 換言之,返回的布爾結果是 false。在這種情況下,傳遞給 runService() 方法的 ICollaborator 對象被模擬 為期望調用 executeJob() 方法,并返回除了 “success” 以外的字符串。通過這種方法,確保把布爾字符串 false 返回給測試。
下面所示的是包含測試邏輯的 ServiceClassTest 類代碼。
清單 3. 場景 1 的 ServiceClassTest 類樣例代碼
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
public class ServiceClassTest extends MockObjectTestCase {
private ServiceClass serviceClass;
private Mock mockCollaborator;
private ICollaborator collaborator;
public void setUp(){
serviceClass = new ServiceClass();
mockCollaborator = new Mock(ICollaborator.class);
}
public void testRunServiceAndReturnFalse(){
mockCollaborator.expects(once()).method\
("executeJob").will(returnValue("failure"));
collaborator = (ICollaborator)mockCollaborator.proxy();
boolean result = serviceClass.runService(collaborator);
assertFalse(result);
}
}
編寫測試的時機
用測試模擬框架運行您自己的測試的最佳方法是利用 test-first 靈活方法。首先創建測試并設定期望。僅在測試失敗后才編寫實現以修正測試。當測試運行正常時,您將編寫另一個測試以檢查稍后添加到待測試的類中的功能。
如果將在各種測試用例中執行公共操作,則在測試中包括 setUp() 方法是一種很好的想法。包括 tearDown() 方法也很不錯,但不作嚴格要求,除非要運行集成測試。
另請注意,使用 jMock 和 RMock,框架將在測試運行結束時或測試運行期間在所有模擬對象中檢查所有期望。并不實際需要為每個模擬期望包括 verify() 方法。當作為 JUnit 測試運行時,測試將通過,如下所示:
圖 3. 場景 1 測試通過
文章來源于領測軟件測試網 http://www.kjueaiud.com/