运行新测试用例。这一次,您将看到成功的结果。图 7 将显示令人愉快的结果。
图 7. RMock 与 jMock 协作使场景 4 测试成功
Collaborator 模拟对象已被正确设置,并且 mockClassB 对象将按预期执行。
回页首
快速查看测试工具差别
正如您已经在场景中看到的,jMock 和 RMock 都是用于测试 Java 代码的强大工具。但是,用于开发和测试的任何其他工具总是有限制。实际上,其他测试工具都是可用的,但是这些测试工具的运行情况都不如 RMock 和 jMock(在 Java 技术中)。个人经验告诉我 Microsoft® .NET 框架也附带了一些功能强大的工具(例如 TypeMock),但是那超出了本文(实际上还有平台)的范围。
表 1 显示了两个框架之间的一些不同之处以及随着时间的推移遇到的可能问题,尤其是在 Eclipse 环境中。
表 1. RMock 与 jMock 测试框架之间的不同之处
测试模拟样式 | jMock | RMock |
---|---|---|
可以模拟接口 |
是:新的 Mock() 方法 |
是:mock() 方法 |
可以模拟具体类 |
是:带有 CGLIB 的 mock() 方法 |
是:mock() 或 intercept() 方法 |
可以模拟任何具体类 | 否:无参数构造函数必须存在 | 是 |
可以随时获得代理 | 是 |
否:仅当 startVerification() 处于绪状态后 |
使用其他 Eclipse 插件的问题 | 无已知问题 | 是:与 Eclipse 的 CoverClipse 插件存在内存冲突 |
结束语
我鼓励您使用这些框架,利用它们的力量来生成单元测试的结果。许多 Java 开发人员不习惯于频繁编写测试。而且如果需要编写测试,通常都是十分简单、覆盖方法的主要功能目标的测试。要测试代码的某些 “难以达到的” 部分,jMock 和 RMock 都是的选择。
使用 jMock 和 RMock 将极大地减少代码中的 bug,提高使用经过证明的方法测试编程逻辑的技巧。此外,阅读文档并用这些框架和其他框架的改进版本进行测试(并减少构造不好的代码)将对提高开发人员技巧有着额外的帮助。