-1
我正在为使用FileInputStream
的方法编写JUnit
,并且在constructor
中只传递文件名。该文件是作为servlet请求的一部分创建的,并且此文件不存储在任何位置。在没有现有文件的情况下使用Mockito/PowerMockito模拟FileInputStream
我想Mock
FileInputStream
使用PowerMockito
,这样它给了我一个模拟的文件对象。不幸的是我得到FileNotFoundException
这是有效的,但我不知道如何测试这种方法,然后因为该文件不存在。被测
方法:
public String viewReport() throws Exception {
this.inputStream = new FileInputStream(DOCUSIGN_REPORT_FILE);
try {
boolean returnReport = validateRequest();
if (returnReport) {
intgList = this.generateViewIntegrationReportData(getESignUIConfig());
this.createCSVFile(intgList, new FileWriter(DOCUSIGN_REPORT_FILE));
} else {
failureResponse(msgs, 400);
return null;
}
} catch (Exception e) {
e.printStackTrace();
msgs.add(new Message(ESignatureIntegrationMessageTypeEnum.MESSAGE_TYPE_ERROR,
UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_CODE_500, UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_TEXT_SERVICE_ERROR));
failureResponse(msgs, 500);
return null;
}
return UiIntegrationKeyConstants.REPORT_REPSONSE;
}
的JUnit至今测试。
@Test
public void testViewReport() throws Exception {
Map<String, Object> actionMap = new HashMap<>();
actionMap.put("application", "ESignatureIntegrationAction");
ActionContext.setContext(new ActionContext(actionMap));
FileInputStream inputStream = Mockito.mock(FileInputStream.class);
PowerMockito.whenNew(FileInputStream.class).withAnyArguments().thenReturn(inputStream);
action = new ESignatureIntegrationAction();
action.viewReport();
}
我得到一个exception
当代码达到new FileInputStream(DOCUSIGN_REPORT_FILE);
感谢您的帮助。
通常的警告:如果你要使用工厂(和依赖注入一起)......那么你不需要Powermock来模拟一个新的调用。 – GhostCat
你的意思是我应该使用Spring注入FileInputStream? – Jaykumar
如果您的代码无法从中读取某些文件,您的测试会测试什么? –