【发布时间】:2008-09-18 16:22:12
【问题描述】:
我的代码将接口作为输入,但只执行了几个接口的方法(通常,只是 getter)。
在测试代码时,我很想定义一个返回测试数据的匿名内部类。但是对于接口需要的所有其他方法,我该怎么办?
我可以使用我的 IDE 为接口自动生成存根,但这似乎相当繁重。
对我关心的两个方法和我不关心的方法都进行存根的最简单方法是什么?
【问题讨论】:
我的代码将接口作为输入,但只执行了几个接口的方法(通常,只是 getter)。
在测试代码时,我很想定义一个返回测试数据的匿名内部类。但是对于接口需要的所有其他方法,我该怎么办?
我可以使用我的 IDE 为接口自动生成存根,但这似乎相当繁重。
对我关心的两个方法和我不关心的方法都进行存根的最简单方法是什么?
【问题讨论】:
如果您使用 JUnit 进行测试,请使用 Mocks 而不是存根。
阅读 Martin Fowler 的开创性文章“Mocks Aren't Stubs”
我推荐EasyMock 框架,它就像一个魅力自动使用反射模拟你的界面。它比 Fowler 文章中的代码示例高级一点,尤其是当你使用 unitils 库包装 EasyMock 时,因此语法会比文章中的简单得多。另外,如果你没有接口,但你想模拟一个具体的类,EasyMock 有一个类扩展。
【讨论】:
查看 JMock。
【讨论】:
编写一个“适配器类”并仅覆盖您关心的方法。
class MyAdapter extends MyClass {
public void A() {
}
...
}
【讨论】:
我相信经典的方法是用空方法创建一个抽象类。 至少,Sun 是这样为 MouseListener 做的,创建 MouseAdapter 来简化这些事件的使用。
【讨论】:
EasyMock 或 JMock 绝对是赢家。我没有使用过 JMock,但我知道使用 EasyMock 您可以根据测试脚本设置 Mock 对象,它会在测试期间的某些情况或点中返回某些值。学习和跑步非常容易,通常不到一个小时。
【讨论】: