我想了解如何可以模擬靜態方法,特別是從靜態Files.class。使用Mockito來模擬java.nio.file.Files靜態方法
基本上,只要該行執行:
Files.newInputStream(this.getPathObj(), StandardOpenOption.READ);
我希望它只是返回一個對象,它是一個InputStream的實例。
這是我的類與我試圖嘲笑的靜態方法。
public class JavaFileInput{
private Path path;
public JavaFileInput(Path path){
this.path = path;
}
public InputStream getInputStream() throws IOException {
return Files.newInputStream(this.getPathObj(), StandardOpenOption.READ);
}
public Path getPathObj() {
return this.path;
}
}
這是一些「僞十歲上下的」單元測試代碼,顯然是行不通的,但我希望它描繪的是什麼,我試圖完成的想法。
@Mock(name="path")
private Path mockedPath = Mockito.mock(Path.class);
@InjectMocks
private JavaFileInput javaFile_MockedPath;
@Before
public void testSetup(){
javaFile_MockedPath = new JavaFileInput(mockedPath);
MockitoAnnotations.initMocks(this);
}
@Test
public void getNewInputStreamTest(){
//Setup
Mockito.when(Files.newInputStream(mockedPathObj, StandardOpenOption.Read)).thenReturn(new InputStream());
//Test
InputStream outputValue = javaFile_MockedPath.getInputStream();
//Validate
assertTrue(outputValue instanceof InputStream);
}
這是否有意義?有沒有人需要做類似的事情?任何幫助將不勝感激。
謝謝你的時間!
你可能想看看PowerMock。 – chrylis