Ich muss eine Reihe von Integrationstests (Arquillian Framework) schreiben und gerade jetzt kämpfe ich in einigen Bereichen. Hier ist ein Beispiel für ein Verfahren in einem Controller, der die Schaffung eines Jasper Bericht initiiert, die anschließend an den Client gestreamt wird:Wie kann ich eine Methode testen, die einen Download als Stream mit Arquillian startet?
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();
}
Wie kann ich einen Test für diese mit dem Arquillian Rahmen schreiben?
Zu diesem Zeitpunkt sieht mein Test wie folgt aus:
@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);
}
Offensichtlich ist dies nicht viel Sinn machen. Es ist die folgende Codezeile, die die Nullpointer wirft:
HttpServletResponse resp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
gute Vorschläge, danke! Ich werde daran arbeiten, diese Nebenwirkungen zu reduzieren. – Robert
Ich würde immer noch schätzen, wenn jemand den einfachsten Weg vorschlagen kann, die zweite Methode zu testen, insbesondere, welche Mocks ich erstellen muss. Ich nehme an, das Senden einer Stream-Methode '' ServletUtils.streamToClient' Methode ist ziemlich Standard. – Robert