下面所示的是包含測試邏輯的 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);
}
}
如果將在各種測試用例中執行公共操作,則在測試中包括 setUp() 方法是一種很好的想法。包括 tearDown() 方法也很不錯,但不作嚴格要求,除非要運行集成測試。
另請注意,使用 jMock 和 RMock,框架將在測試運行結束時或測試運行期間在所有模擬對象中檢查所有期望。并不實際需要為每個模擬期望包括 verify() 方法。當作為 JUnit 測試運行時,測試將通過,如下所示:
圖 3. 場景 1 測試通過
ServiceTestClass 類將擴展 jMock CGLIB 的 org.jmock.cglib.MockObjectTestCase 類。mockCollaborator 是一個十分簡單的 org.jmock.JMock 類。通常,用 jMock 生成模擬對象有兩種方法:
• 要模擬接口,則使用 new Mock(Class.class) 方法
• 要模擬具體類,則使用 mock(Class.class, "identifier") 方法
文章來源于領測軟件測試網 http://www.kjueaiud.com/