Java 如何使用easymock模拟构造函数上的方法调用?
我有一个类,它接收一个工厂作为参数,该参数在构造函数内部调用。必须在那里调用它,因为对象在使用之前应该完全初始化。比如:Java 如何使用easymock模拟构造函数上的方法调用?,java,constructor,easymock,Java,Constructor,Easymock,我有一个类,它接收一个工厂作为参数,该参数在构造函数内部调用。必须在那里调用它,因为对象在使用之前应该完全初始化。比如: class MyClass { private Foo foo; MyClass(FooFactory fooFactory, Bar bar) { this.foo = fooFactory.newFoo(bar); } } 无法将FO实例直接传递给构造函数,因此考虑这是对问题的限制。无法使用EasyMock测试MyClass,因为fooFacto
class MyClass {
private Foo foo;
MyClass(FooFactory fooFactory, Bar bar) {
this.foo = fooFactory.newFoo(bar);
}
}
无法将FO实例直接传递给构造函数,因此考虑这是对问题的限制。无法使用EasyMock测试MyClass,因为fooFactory将是未在安装程序中初始化的模拟:
private MyClass myClass;
public void setUp() {
FooFactory fooFactory = mock(fooFactory);
Bar bar = new Bar();
myClass = new MyClass(fooFactory, bar)
}
因此,当调用setUp时,构造函数内部对fooFactory.newFoo(bar)
的调用将失败,并出现IllegalStateException,因为没有设置此类期望
问题是,如何在构造函数中模拟方法调用?在创建
MyClass
之后,您可以在设置中EasyMock.reset(fooFactory)
。为什么不能在setUp()方法中设置fooFactory的期望值?因为构造函数将在replay()之前调用fooFactory.newFoo(bar)将调用它并抛出异常。如果您在安装程序中调用replay(),则无法在其他测试中模拟任何其他内容。可能我不明白您的意思,但这不起作用。这里的问题不是重置mock,而是在调用replay()之前让它工作。我想他说的是,您可以重放mock,调用构造函数,然后重置mock以使用它,就像您没有调用replay一样。关于重置的文档不是很清楚。@peninha它对我有用<代码>重置
将模拟状态返回到创建后的状态。您将记录fooFactory.newFoo()
,回放它,调用MyClass
构造函数,验证
和重置
的行为,使其可用于实际测试方法。