我编写了一个测试方法,其中有一个模拟对象(比如 mockA)。我可以期待 mockA 对实际程序逻辑的方法调用。但是,我的程序的一部分也有日志记录,需要字符串形式的对象信息。在创建字符串消息时,会在对象上调用一些不必要的方法。因此,在运行测试时,这些方法调用会导致测试失败。这是一个例子。
public class Example {
public int method(Foo foo) {
int a = foo.doSomething(); //required for program.
String logMessage = "foo did something." + foo.getA() + foo.getB().getC();
logger.log(logFile, logMessage);
return a;
}
}
这是示例测试方法。
@Test
public void testMethod() {
int something = 0;
Foo mockFoo = EasyMock.createMock(Foo.class);
expect(mockFoo.doSomething()).andReturn(something);
EasyMock.replay(mockFoo);
assertEquals(new Example().method(mockFoo), something);
EasyMock.verify(mockFoo);
}
这给 foo.getA() 提供了意想不到的方法调用。如果我为 Foo.class 创建一个不错的模拟,它会给我 foo.getB().getC() 的空指针异常,因为 B 是 foo 中的一个对象。我不可能在 foo.xml 中创建所有对象的漂亮模拟。
有没有办法防止这种用于记录的字符串操作?或者,可以做些什么?
谢谢