注,首要的是,使用 jMock 框架模拟了 ClassB
类。使用 RMock,没有一种实际方法从模拟对象中提取和使用代理,以便在测试 setUp()
方法中的其他位置使用该代理。使用 RMock,仅当调用 startVerification()
方法之后,才显示代理对象。本例中的优点是使用 jMock,因为在需要返回自我模拟对象的情况下,可以 获得设置其他模拟对象所需的信息。
反过来,需要注意的第二点是您不能使用 jMock 框架来模拟 Collaborator
类。原因是该类没有无参数构造函数。此外,在构造函数内有某种逻辑,这种逻辑将确定是否先获得实例。事实上,出于本次讨论的目的,ClassB
中的 wierdMethod()
方法必须返回 passed 才能使 Collaborator
对象被实例化。但是,另请注意,在默认情况下,方法总是返回 failed
。测试成功明显需要模拟 ClassB
。
此外,不同于先前的示例,此场景中的类数组作为附加参数被包含到了 intercept()
方法中。对此不作严格要求,但是用它作为密钥可以快速识别在实例化 RMock 测试对象时使用的对象类。
运行新测试用例。这一次,您将看到成功的结果。图 7 将显示令人愉快的结果。
图 7. RMock 与 jMock 协作使场景 4 测试成功
Collaborator
模拟对象已被正确设置,并且 mockClassB
对象将按预期执行。
正如您已经在场景中看到的,jMock 和 RMock 都是用于测试 Java 代码的强大工具。但是,用于开发和测试的任何其他工具总是有限制。实际上,其他测试工具都是可用的,但是这些测试工具的运行情况都不如 RMock 和 jMock(在 Java 技术中)。个人经验告诉我 Microsoft® .NET 框架也附带了一些功能强大的工具(例如 TypeMock),但是那超出了本文(实际上还有平台)的范围。
表 1 显示了两个框架之间的一些不同之处以及随着时间的推移遇到的可能问题,尤其是在 Eclipse 环境中。
表 1. RMock 与 jMock 测试框架之间的不同之处
文章来源于领测软件测试网 https://www.ltesting.net/