抽象クラスでいくつかの例外をJunit
でテストする必要があります。抽象クラスのモック例外Java
抽象クラス:
public abstract class AbstractReport {
private final Log logger = LogFactory.getLog(this.getClass());
private static final String PREFIX_NAME = "reportFile";
protected Path generate(String templatePath, Map<String, Object> params, JRDataSource datasource) {
// Temporal file to write the document
Path file = null;
try {
file = Files.createTempFile(PREFIX_NAME, null);
} catch (final IOException e) {
logger.error("Exception creating temp file",e);
return null;
}
try (InputStream reportStream = this.getClass().getResourceAsStream(templatePath); FileOutputStream outputStream = new FileOutputStream(file.toFile())) {
final JasperDesign jd = JRXmlLoader.load(reportStream);
final JasperReport jr = JasperCompileManager.compileReport(jd);
final JasperPrint jp = JasperFillManager.fillReport(jr, params, datasource);
final JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(Arrays.asList(jp)));
final SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
exporter.exportReport();
} catch (final JRException e) {
logger.error("Exception processing report",e);
file.toFile().delete();
return null;
} catch (final FileNotFoundException e) {
logger.error("Report template not found",e);
file.toFile().delete();
return null;
} catch (final IOException e) {
logger.error("Exception reading report template",e);
file.toFile().delete();
return null;
}
return file;
}
}
私はこのコードからすべてのキャッチをテストする必要があります。私が調べたところ、でMockitoを呼び出すと、メソッドを呼び出すときに例外をモックすることができます。たとえば、 "generate"を呼び出すと例外が発生する可能性がありますが、 "generate"コード内で例外を発生させる方法(たとえば、一時ファイルを作成するときはIOException
)。
このクラスに依存性がない場合、模擬するものは何もありません。 –