我想要做的是模拟BufferedReader
新创建的实例。这里是一个应该被测试代码:PowerkMocking BufferedReader缓慢运行
A.java
...
@Override
public String read(String fileName) throws IOException {
...
try {
fileReader = new FileReader(fileName);
bufferedReader = new BufferedReader(fileReader);
String tmp;
StringBuilder builder = new StringBuilder();
while ((tmp = bufferedReader.readLine()) != null) {
builder.append(tmp);
}
return builder.toString();
} catch (IOException e) {
...
} finally {
...
}
}
...
我要做的,就是既PowerMock创建FileReader
和BufferedReader
创作。
ATest.java
@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
public class ATest {
@Mock
private FileReader fileReader;
@Mock
private BufferedReader bufferedReader;
...
@Test
public void test() throws Exception {
PowerMockito.whenNew(FileReader.class).withArguments(FILE_NAME).thenReturn(fileReader);
PowerMockito.whenNew(BufferedReader.class).withAnyArguments().thenReturn(bufferedReader);
PowerMockito.doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) throws Throwable {
return "test";
}
}).when(bufferedReader).readLine();
assertArrayEquals(reader.read(FILE_NAME), new String[]{"test"});
}
}
但随后的测试永远不会终止。我甚至无法调试它。
只要PowerMockito.doAnswer()
被移除,代码就会被执行(并且可用于调试)。我也尝试使用Mockito.mock()
而不是PowerMockito.doAnswer()
,它没有帮助。
什么可能会导致测试的中断执行?
谢谢,非常有道理。 – azizbekian
非常欢迎。我总是很高兴,当人们不回复这样的答案时,“但它不是我的代码,我必须测试;所以PowerMock是我的唯一选择”;-) – GhostCat
而且正如旁注:FileUtilities.readAllLines ) - 接受一个字符串,并返回该文件中所有行的列表(您可以轻松地连接以获取单个字符串)。因此,可能不是重新实现第10次“完全读入字符串”,您也可以使用其中一个现有的实现。我确定apache commons,番石榴,他们都有这个方法! – GhostCat