<分区>
Possible Duplicate:
Intercept object on method invocation with Mockito
我有一个类可以将一种格式映射到另一种格式。由于这是遗留代码,我不敢重写它,它基本上是一组插件,所以如果我更改一个,我可能必须更改所有其他插件。它不是在考虑测试的情况下开发的。 所以这是我的问题。
interface Mapper {
void handle(ClassA classA);
void handle(ClassB classB);
}
public interface Publisher {
public void publish(MappedClass mappedClass);
}
class MyMapper implements Mapper {
private Publisher publisher;
public void setPublisher(final Publisher publisher) {
this.publisher = publisher;
}
public handle(ClassA classA) {
final MappedClass mappedClass = // Map from ClassA to MappedClass
publisher.publish(mappedClass);
}
public handle(ClassB classB) {
final MappedClass mappedClass = // Map from ClassB to MappedClass
publisher.publish(mappedClass);
}
}
好的。因此,根据“处理”的是哪个类,MappedClass
将以不同的值发布,这是我要验证(测试)的值。问题是我将得到一个测试,我首先必须编写代码来测试是否调用了 publish
方法,
private boolean wasCalled;
@Test
public void testClassAMapped() {
wasCalled = false;
final MyMapper myMapper = new MyMapper();
myMapper.setPublisher(new Publisher() {
public void publish(final MappedClass mappedClass) {
wasCalled = true;
// Code for verifying the fields in mappedClass
});
}
final ClassA classA = // Create classA
myMapper.handle(classA);
assertTrue(wasCalled);
}
所以首先我们创建我们的模拟 Publisher
它将首先将 wasCalled
的状态设置为 true
所以我们知道这个方法曾经被调用过(这个例子被简化了,所以代码中实际上有一个调度程序......遗留代码所以我不想改变它),其次我想验证 MappedClass
有正确的字段值。
我想知道的是,是否有人知道更好的测试方法? wasCalled
和 wasCalled
检查或多或少成为我的许多测试的样板代码,但由于我不想添加那么多困惑(自己的 hacks,测试基础类等)我想知道在 Mockito 或 EasyMock 中是否有办法做到这一点?