使用 Junit 和 mockito 测试捕获块逻辑



我有如下测试的类:

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();
   }
}

相关内容

  • 没有找到相关文章

最新更新