ed = new LED(mockLEDCard); private LED led; private ILEDCard mockLEDCard; public class AEasyMockTestCase extends TestCase { import junit.framework.TestCase;
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 } 通过上文对 jMock 和 EasyMock 的介绍,我们可以发现 jMock 可以灵活的定义对象的行为。例如 mock.expects(once()).method("method2").with( same(b1), ANYTHING ).will(returnValue(method2Result)); 这 点在 EasyMock 里比较难于实现。 } led.setMessage("Another test"); verify(mockLEDCard); public void testSetWord() { mockLEDCard.setMessage("Another test"); replay(mockLEDCard); } led.ShowMesage(); verify(mockLEDCard); public void testGetWord() { expect(mockLEDCard.getMessage()).andReturn("This is a EasyMock Test!"); replay(mockLEDCard);
Rmock 及其它
目前比较流行的 mock 工具,还有 RMock, 目前的版本的是 2.0,当使用 jUnit 开
发测试用例时,它支持 设置-修改-运行-验证这样的工作流。它加强了基于交互和基于状态的测试,同时有更好的测试
工作流 定义。 Rmock 还可以使用 DynamicSuite 来解决维护 TestSuites 的
问题。 市场上还有支持各种语言的 Mock object 的框架,如 pMock(Python),NMockLib(C#),Mocha(Ruby), JSMock(JavaScript),mockpp(C++) 。
结语
在软件开发过程中,开发人员需要注重测试驱动开发,并利用模拟对象的技术来帮助进行测试。许多开发 人员不习惯于频繁编写测试。即使需要编写测试,通常都是简单的进行主要功能测试。如果要测试代码的 某些难以到达的部分,选择各种 Mock object 的框架可以降低开发测试的复杂度。 同时在硬件相关的程序开发中尤其是驱动开发,应用 Mock 技术将极大地提高
软件开发的进度,并且减少 代码中的缺陷,大大提高硬件软件兼容性和可靠性。