我需要編寫一堆集成測試(Arquillian框架),現在我正在幾個領域掙扎。這裏是一個控制器的方法,發起Jasper報表,隨後將其傳送到客戶端創建的一個例子:我該如何測試一種使用Arquillian啓動下載流的方法?
public void executeFibuAuswertung(){
Report report = reportService.find(99913L);
reportParameterForm.setReport(report);
List<ReportParameter> reportParameters = Collections.emptyList();
createExcelReport(reportParameters);
reportExecutionController.streamReportResult();
}
public void streamReportResult(){
EnumReportFormat format = reportParameterForm.getSelectedFormat();
ServletUtils.streamToClient(reportParameterForm.getReportResult()
, reportParameterForm.getReport().getTitle() + format.getFileExtention()
, format.getContentType()
, false);
facesContext.responseComplete();
}
我怎麼能寫使用的Arquillian框架這樣的測試?
在這個時候,我的測試是這樣的:
@Before
public void before() {
FacesContext context = ContextMocker.mockFacesContext();
ContextMocker.mockPostback(context, false);
ContextMocker.mockFacesMessages(context);
ContextMocker.mockFindComponent(UIComponent.getCurrentComponent(context), context);
}
@Test(expected = NullPointerException.class)
@WindowScopeRequired
public void testExecuteAuswertung1() throws Exception {
fibuController.executeAuswertung();
byte[] content = reportParameterForm.getReportResult();
Assert.assertNotNull(content);
}
很顯然,這並沒有太大的意義。這是下面的代碼行拋出的NullPointerException異常:
HttpServletResponse resp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
好的建議,謝謝!我將努力減少那些僅有副作用的方法。 – Robert
如果任何人都可以建議測試第二種方法的最簡單方法,具體來說,我將不得不創建哪些Mocks,我仍然會很感激。我想發送一個流方法「ServletUtils.streamToClient」方法是相當標準的。 – Robert