在 setUp()
方法内,根据为扩展 jMock-CGLIB MockObjectTestCase
对象而创建的私有内部类实例化了新 "testcase"
。使用任何 jMock 功能时,这个小解决方法对于确保整个测试类为 RMock TestCase
对象十分有必要。例如,您将设定类似 testCase.once()
而不是类似 once()
的 jMock 期望,因为 TestClass
对象将扩展 RMockTestCase
。
构建基于 ClassB
类的模拟对象并向其提供期望。然后您将使用它帮助实例化 RMock Collaborator
模拟对象。待测试的类是 MyNewClass
类(在这里显示为私有内部类)。同时,其 executeJob()
方法将接收 Collaborator
对象并运行 executeSomeImportantFunction()
方法。
清单 11 和 12 分别显示了 ClassA
和 ClassB
的代码。ClassA
是没有实现的简单类,而 ClassB
显示了阐明要点所需的最少细节。
清单 11. ClassA 类
public class ClassA{} |
此类只是我使用的一个虚构类,用于强化一个要点:要模拟构造函数接收对象参数的类,有必要使用 RMock。
清单 12. ClassB 类
public class ClassB{
public ClassB(){}
public String wierdMethod(){
return "failed";
}
}
|
ClassB
类的 wierdMethod
将返回 failed。这是十分重要的,因为该类必须简短地返回另一个字符串才能使测试通过。
清单 13 显示了测试示例的最重要部分:Collaborator
类。
清单 13. Collaborator 类
public class Collaborator { private String _string; private ClassA _classA; private ClassB _classB; public Collaborator(String string, ClassA classA, ClassB classB) throws Exception{ _string = string; _classA = classA; if(classB.wierdMethod().equals("passed")){ _classB =classB; } else{ throw new Exception("Something bad happened"); } } public void executeSomeImportantFunction(){ } } |