我有课程要测试如下:
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();
}**
}
}
问题是如何测试catch块中的逻辑?
答案 0 :(得分:2)
如果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();
}
}