assertFalse(result) 代碼行表示與場景 1 相同的測試期望,而 RMock 像 jMock 以前那樣維持測試成功。在許多方面,這都十分重要,但是這里更重要的特點可能是實踐了修正失敗測試的靈活 原則而不更改測試期望。惟一的差別是使用了另一個框架。
在下一個場景中,您將在一種特殊情況下使用 jMock 和 RMock。沒有一個框架能夠僅憑自身就實現正確結果,除非在測試內形成某種聯合。
場景 4:jMock 和 RMock 之間的特定協作
如前所述,我希望檢驗兩個框架必須協同工作才能實現某個結果的情況。否則,構建良好的測試每次都將失敗。在某些情況下,使用 jMock 還是 RMock 并不重要,例如,當需要模擬的接口或類存在于已經簽名的 JAR 中時。此類情況十分少見,但是當測試針對安全專有的產品(通常是這樣或那樣的一類現有軟件)中的應用程序編程接口 (API) 編寫代碼時可能會出現此情況。
清單 10 顯示了兩個框架完成測試用例的示例。
清單 10. 場景 4 的測試示例
public class MyNewClassTest extends RMockTestCase{
private MyNewClass myClass;
private MockObjectTestCase testCase;
private Collaborator collaborator;
private Mock mockClassB;
public void setUp(){
myClass = new MyNewClass();
testCase = new MyMockObjectTestCase();
mockClassB = testCase.mock(ClassB.class, "mockClassB");
mockClassB.expects(testCase.once()).method("wierdMethod").
will(testCase.returnValue("passed"));
Class[] someClassArray = new Class[]{String.class, ClassA.class, ClassB.class};
Object[] someObjectArray = new Object[]
{"someArbitraryString", new ClassA(), (ClassB)mockClassB.proxy()};
collaborator = (Collaborator)intercept
(Collaborator.class, someClassArray, someObjectArray, "mockCollaborator");
}
public void testRMockAndJMockInCollaboration(){
startVerification();
assertTrue(myClass.executeJob(collaborator));
}
文章來源于領測軟件測試網 http://www.kjueaiud.com/