Reputation: 1071
I have class to test like below:
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();
}**
}
}
The question is how to test the logic in catch block?
Upvotes: 5
Views: 19033
Reputation: 26572
If the sendEmailToSupport
is at least a package level method, then you could go for something like:
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();
}
}
Upvotes: 4