_string = string;
_classA = classA;
if(classB.wierdMethod().equals("passed")){
_classB =classB;
}
else{
throw new Exception("Something bad happened");
}
}
public void executeSomeImportantFunction(){
}
}
注,首要的是,使用 jMock 框架模拟了 ClassB 类。使用 RMock,没有一种实际方法从模拟对象中提取和使用代理,以便在测试 setUp() 方法中的其他位置使用该代理。使用 RMock,仅当调用 startVerification() 方法之后,才显示代理对象。本例中的优点是使用 jMock,因为在需要返回自我模拟对象的情况下,可以 获得设置其他模拟对象所需的信息。
反过来,需要注意的第二点是您不能使用 jMock 框架来模拟 Collaborator 类。原因是该类没有无参数构造函数。此外,在构造函数内有某种逻辑,这种逻辑将确定是否先获得实例。事实上,出于本次讨论的目的,ClassB 中的 wierdMethod() 方法必须返回 passed 才能使 Collaborator 对象被实例化。但是,另请注意,在默认情况下,方法总是返回 failed。测试成功明显需要模拟 ClassB。
此外,不同于先前的示例,此场景中的类数组作为附加参数被包含到了 intercept() 方法中。对此不作严格要求,但是用它作为密钥可以快速识别在实例化 RMock 测试对象时使用的对象类。
运行新测试用例。这一次,您将看到成功的结果。图 7 将显示令人愉快的结果。
图 7. RMock 与 jMock 协作使场景 4 测试成功
文章来源于领测软件测试网 https://www.ltesting.net/