Mockito Spy'ing on the object to unit test
监视正在进行单元测试的对象是否是代码异味?例如,假设我有一个类,其工作是简单地计算字符串中的行数。--LineCounter
class LineCounter {
public int getNumLines(String string) {
String metadata = getStringMetadata(string);
// count lines in file
return numLines;
}
/** Expensive operation */
protected String getStringMetadata(String string) {
// do stuff with string
}
}
现在我想为此编写一个JUnit 4测试,以测试该方法,同时模拟昂贵的调用。我决定使用Mockito的间谍机制来返回一个虚拟值。getNumLines
getStringMetadata
getStringMetadata
class LineCounterTests {
@Test public void testGetNumLines() {
LineCounter lineCounterSpy = Mockito.spy(new LineCounter());
// Mock out expensive call to return dummy value.
Mockito.when(lineCounterSpy.getStringMetadata(Mockito.anyString()).thenReturn("foo");
assertEquals(2, lineCounterSpy.getNumLines("hello\nworld");
}
}
这是一件合理的事情吗?我觉得测试一个间谍对象而不是实际的类很奇怪,但我真的想不出反对它的理由。