在Java中存根复杂接口的最简单方法是什么?
时间:2020-03-06 14:22:13 来源:igfitidea点击:
我的代码将接口作为输入,但是仅使用了接口的几种方法(通常只是吸气剂)。
在测试代码时,我很想定义一个返回测试数据的匿名内部类。但是,我需要对接口需要的所有其他方法做些什么?
我可以使用我的IDE为接口自动生成一个存根,但这似乎很繁琐。
存根我所关心的两个方法中的任何一个的最简单方法是什么?
解决方案
如果要使用JUnit进行测试,请使用Mocks而不是存根。
阅读马丁·福勒(Martin Fowler)的开创性文章" Mo不存根"。
我建议使用EasyMock框架,它可以像魅力一样自动使用反射来模拟界面。它比Fowler文章中的代码示例先进一些,尤其是当我们使用unitils库包装EasyMock时,因此语法将比本文中的语法简单得多。另外,如果我们没有接口,但是想模拟具体的类,则EasyMock具有类扩展。
查看JMock。
http://www.jmock.org/
编写一个"适配器类",然后仅覆盖我们关心的方法。
class MyAdapter extends MyClass { public void A() { } ... }
我相信经典的方法是用空方法创建一个抽象类。
至少,这就是Sun为MouseListener所做的,创建了MouseAdapter来简化这些事件的使用。
EasyMock或者JMock绝对是赢家。我没有使用过JMock,但是我知道使用EasyMock可以根据测试脚本设置Mock对象,它会在测试过程中的某些情况下或者某些点返回某些值。学习和运行起来很容易,通常不到一个小时。