spring @Async测试异常案例

enxuqcxy  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(165)

我必须测试这段代码是否抛出异常,原因是方法被注解为@Async exceptions不抛出

@Async
    public CompletableFuture<Response> method(Req req) {
        Response response = method(req);
        return CompletableFuture.completedFuture(response);
    }

private Response anotherMethod(Request req) {
        String uri = getUrl();

       Response response = restTemplate.postForObject(//some params);
        if (response == null) {
            throw new RemoteServiceException();
        }
        if (!response.isOk()) {
            throw new RemoteServiceException(ErrorCodeConstant.Exception,
                    "some message");
        }
        return response;
    }

如何在私有方法中获取测试异常情况?

uyhoqukh

uyhoqukh1#

由于您的私有方法从对resttemplate的调用中获得响应,因此可以模拟resttemplate。你没有列出你的类逻辑,所以我在这里做一些假设,你的类名为SomeClass,你正在向它注入一个RestTemplate。另外,我假设你在问题中添加的代码不是你的实际代码,因为在你的BLOG方法中,它只是调用自己,这将导致StackOverflow。
您的测试应该是这样的(对于Junit4,您可以对5做同样的事情,但我假设是4,因为您仍然使用RestTemplate)。这也假设您打算从method调用anotherMethod

@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {

  @Mock
  private RestTemplate restTemplate;

  @InjectMocks
  private SomeClass someclass;

  @Test(expected = RemoteServiceException.class)
  public void method_restTemplateValidResponse() {

     when(restTemplate.postForObject(/* your matches here */)).thenReturn(null);

     Req req = new Req();
     someClass.method(req);
  }
}

相关问题