模拟一个新的对象创建

时间:2011-01-13 10:04:27

标签: unit-testing mocking easymock

我正在使用EasyMocks 在方法内部创建了一个新对象。在该对象上调用一个返回映射的方法。如下所示

test(){
   Fun f= new Fun();
    Map m =f.getaMap();
}

我想在那时返回自定义地图。我该怎么做。
感谢。

1 个答案:

答案 0 :(得分:2)

我猜测你的代码中你已经给我们一个测试方法,你正在测试Fun并查看Map产生的Fun

依赖注入MapFactory,为Map创建Fun。我不确定EasyMock的语法,所以mockMapFactory这里是模拟对象,它将有一个方法为你创建一个地图。模拟生成地图的方法,然后在类中调用方法而不是使用new

test() {

    Fun f= new Fun(mockMapFactory);
    Map m =f.getaMap();
}

看一下Factory设计模式,这是一种非常好的方法,可以让你避免调用new,这样就可以模拟对象的创建(如果需要的话,还可以模拟对象本身)。这也意味着您的类不再负责决定它创建的对象类型。

在测试工厂时,您将无法在其工厂内部模拟Map的创建。没关系。要么通过检查来测试它,要么只是检查你是否得到了正确的物体。