0
我想嘲笑文件和對象的FileInputStream爲JUnit測試。測試類使用文件和文件的FileInputStream用的Mockito/PowerMockito
讓我們說我們有一個分析器。解析器外部只能通過解析(File myFile)方法訪問。其他方法,如readMyStream ....是私有的。
例如代碼:
public class Parser {
public HashMap<String, String> parse(File myFile) throws Exception {
HashMap<String, String> myConfig;
Config config;
try {
//this line gives me a headache
FileInputStream myFileInputStream = new FileInputStream(myFile);
configStream = readMyStream(myFileInputStream);
..........
} catch (FileNotFoundException e) {
throw e;
}
return myConfig;
}
//reads the stream
private Config readMyStream(FileInputStream myFileInputStream) {
Config config;
...JDOM stuff....
return config;
}
}
的問題我面對:
- 如何斷言文件對象的的FileInputStream(PowerMockito)這樣的文件屬於此的FileInputStream與下列內容
- 如何嘲笑一個私有方法(的Mockito/PowerMockito)
嘲諷/不工作的一個例子:)......
public class ParserTest {
@Test
public final void testParse() {
File MOCKEDFILE = PowerMockito.mock(File.class);
PowerMockito.when(MOCKEDFILE.exists()).thenReturn(true);
PowerMockito.when(MOCKEDFILE.isFile()).thenReturn(true);
PowerMockito.when(MOCKEDFILE.isDirectory()).thenReturn(false);
PowerMockito.when(MOCKEDFILE.createNewFile()).thenReturn(true);
PowerMockito.when(MOCKEDFILE.length()).thenReturn(11111111L);
//what about the path of MOCKEDFILE which isn't existing
PowerMockito.when(MOCKEDFILE.getPath()).thenReturn(?????);
//how to assign a File an FileInputStream? (I thought something like)
PowerMockito.mockStatic(FileInputStream.class);
FileInputStream MOCKEDINPUTSTREAM = PowerMockito.mock(FileInputStream.class);
PowerMockito.whenNew(FileInputStream.class).withArguments(File.class).thenReturn(MOCKEDINPUTSTREAM);
//how to mock the private method readMyStream
}
請你發佈一個示例代碼...我不明白的JUnit TemporaryFolder規則應如何與我的問題。 –
您可以使用'TemporaryFolder'在運行時創建一個符合測試需求的文件,無論文件是否存在(創建它),具有特定的名稱,擴展名,大小等等。使用這個與'Supplier'結合使用來測試不可測試? –
我可以寫類似 '@rule 公共TemporaryFolder tmpFolder =新TemporaryFolder(); @Test 公共無效testParse_xyas(){ 文件TMPFILE = tmpFolder.newFile(文件名); //現在如何聲明我的tmpFile InputStream? } ..' –