我有如下测试的类:
public class ReportWriter {
private FileWrter fw;
private static Logger logger = Logger.getLogger(ReportWriter.class);
public ReportWriter(FileWrter fw) {
this.fw = fw;
}
public void writeData(Data) {
try{
fw.open();
fw.write(data);
fw.close();
} **catch(DiskFullException e) {
//after catch we log and handle it without rethrow the exception
logger.log(Level.WARN, "warning log here", e);
// some more logic here
sendEmailToSupport();
}**
}
}
问题是如何测试捕获块中的逻辑?
如果sendEmailToSupport
至少是一个包级方法,那么你可以选择如下方法:
public class ReportWriterClass{
@Spy
@InjectMocks
private ReportWriter reportWriterSpy;
@Mock
private FileWrter fwMock;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldSendEmail_whenDiskIsFull() throws Exception{
// Arrange
Data data = new Data();
doNothing().when(reportWriterSpy).sendEmailToSupport());
doThrow(new DiskFullException()).when(fwMock).write(data);
// Act
reportWriterSpy.writeData(data);
// Assert
verify(reportWriterSpy).sendEmailToSupport();
}
}