首页 > 解决方案 > 如何为执行异常编写测试

问题描述

我有以下方法。它工作正常并且能够测试代码的其余部分。但是我如何测试/模拟捕获 ExecutionException 的那个 catch 块?我想降落在那个接球区。我正在使用 Mockito 来模拟其他部分,但在这种情况下我不能模拟 try 块,或者我可以吗?

private static ExecutorService executor = Executors.newFixedThreadPool(1);

public Detail create(String num){

    return new Detail(){

        private final Future<String> number = executor.submit(() -> someAutowiredClass.method(num));

        @Override
        public String getNumber() {
            try {
                return this.number.get();
            } catch (InterruptedException e) {
                throw new CustomException();
            } catch (ExecutionException e) {
                throw new CustomException2();
                // I want to land inside here for my test. How do I do that? 
            }
        }
    };
} 

这就是我目前为中断部分编写测试的方式。

@Test
public void myTest() {
    String num  = "123";
    String number = "456";
    when(someAutowiredClass.method(num)).thenReturn(456);

    Detail detail = myClass.create(num);
    Thread.currentThread().interrupt();

    try {
        assertEquals(number, detail.getNumber());
    }catch (CustomException e){
        // some assertions.
    }
}

标签: java

解决方案


推荐阅读