通常某个逻辑类handler会用到其它的业务逻辑类来实现某些功能,如Dao/Jms/HttpRequet/HttpResponse等,我们可以把单元测试类派生自junit.framework.TestCase,添加testXXX方法对handler的单元测试,对其中用到的别的逻辑对象的接口interface进行Mock。举例如下:Mock interfaceMock = new Mock(Interface.class); //模拟方法 interfaceMock.expects(new InvokeAtLeastOnceMatcher()). //方法调用类型:仅一次/至少一次/至多一次等method("/*方法的名字:methodA*/"). with( /*方法的参数:比如new IsEqual(-1L)*/). will(new ReturnStub(/*方法的返回:比如false*/));handler.setInterfaceMock((InterfaceMock) interfaceMock.proxy());Object ret = handler.addGroup(group); //假设addGroup用到InterfaceMock的methodAassertNotNull(ret);//Assert步骤,检查方法功能。在我的测试过程中,发现无法用不同的参数序列带入生成不同的返回,当然这也是没必要的,带入不同的返回是可以重构Matcher的,需要注意的是不要用InvokeOnceMatcher类型,否则无法重构。
本文转自 dannyy1026 51CTO博客,原文链接:http://blog.51cto.com/dannyyuan/275127