考慮以下字段和來自需要測試的類的方法。如何讓PowerMock從靜態方法返回預期值
private final static String pathToUUID = "path/to/my/file.txt";
public String getUuid() throws Exception {
return new String(Files.readAllBytes(Paths.get(pathToUUID)));;
}
UUID存儲在應用程序第一次運行時創建的文件中。 A file.txt
存在於pathToUUID
指示的位置。我正在嘗試(並努力)爲這種方法編寫單元測試。
@RunWith(PowerMockRunner.class)
@PrepareForTest({Files.class})
public class MyTest {
private final String expected = "19dcd640-0da7-4b1a-9048-1575ee9c5e39";
@Test
public void testGetUuid() throws Exception {
UUIDGetter getter = new UUIDGetter();
PowerMockito.mockStatic(Files.class);
when(Files.readAllBytes(any(Path.class)).thenReturn(expected.getBytes());
String retrieved = getter.getUuid();
Assert.assertEquals(expectedUUID, retrieved);
}
}
不幸的是when().thenReturn()
測試時,不會調用和測試執行的集成測試,從文件讀取系統文件並返回它的價值,而不是簡單地模擬值i期待。但是,如果我在測試方法中欺騙Files.readAllBytes()
的電話並將結果回顯到控制檯,則會顯示expected
值。
那麼,我怎樣才能讓我的測試方法正確地與PowerMock when()-thenReturn()
模式功能?