【发布时间】:2012-09-10 13:06:10
【问题描述】:
我有一个类可以从一种格式映射到另一种格式。由于这是遗留代码,我不敢重写它,它基本上是一组插件,所以如果我更改一个,我可能不得不更改所有其他。它的开发没有考虑到测试。 所以这是我的问题。
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 检查成为我的许多测试的或多或少的样板代码,但由于我不想添加那么多混乱(自己的黑客、测试基类等)我想知道是否有没有办法在 Mockito 或 EasyMock 中做到这一点?
【问题讨论】:
标签: java junit mockito easymock