我想要做的是模擬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