使用Junit和Mockito测试catch块逻辑 [英] Test catch block logic with Junit and mockito

查看:326
本文介绍了使用Junit和Mockito测试catch块逻辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有要测试的课程,如下所示:

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

问题是如何在catch块中测试逻辑?

The question is how to test the logic in catch block?

推荐答案

如果sendEmailToSupport至少是包级方法,则可以使用以下方法:

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

这篇关于使用Junit和Mockito测试catch块逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆