java - 如何断言抛出异常后尚未调用方法?

标签 java spring mocking mockito

我有一个方法,它会发布到 API,然后在方法内调用后执行其他业务逻辑。如果在发布到 API 时由于某种原因出现问题,API 会返回异常。我不想捕获此异常,因为我不希望代码继续执行。到目前为止,在我的单元测试中,我已经模拟了 API 并编写了 when(APIService.postDetails(any())).thenThrow(Exception.class) 并断言我已经验证了一些的方法已通过mockito中的verify方法调用了0次。

当我尝试运行测试时,测试失败。我得到了预期的 java.lang.Exception ,但我也期望单元测试在验证时断言。可能吗?

测试:

   @Test
   public void shouldCallPublishZeroTimes(){
      Account account = Account.builder()
              .street("ZBC123")
              .address("123456")
              .postcode("w19uu")
              .build();
      List<Account> accountList = new ArrayList<>();
      accountList.add(account);

      when(customerDB.getExistingClient(any())).thenThrow(Exception.class);

      client.createAccount();

      verify(eventPublisher, times(0)).publish(any());
   }

最佳答案

过去我曾这样做过:

@Test
public void shouldCallPublishZeroTimes(){
    Account account = Account.builder()
            .street("ZBC123")
            .address("123456")
            .postcode("w19uu")
            .build();
    List<Account> accountList = new ArrayList<>();
    accountList.add(account);

    when(customerDB.getExistingClient(any())).thenThrow(Exception.class);
    try {
        client.createAccount();
        fail();
    } catch (Exception e) {
        verify(eventPublisher, times(0)).publish(any());
    }
}

关于java - 如何断言抛出异常后尚未调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55847824/

相关文章:

java - Java中将非英文字符串转换为普通字符串

java - JSF 2.2 和 Spring 4 以及不同层的 CDI 不丢失 Spring 特性

java - Camel 上下文未在 hello world 应用程序中启动

Angular 2 - MockBackend - Passtrough 等效吗?

java - 泛型数组和泛型值有什么区别?

java - Spring boot 2 升级 - spring boot data jpa saveAll() very slow

spring - 如何在一个应用程序中将tomcat配置成两个不同的域?

c# - 'System.Web.Mvc.ViewEngines' 的类型初始值设定项抛出异常

php - 我如何模拟唯一的验证规则?

java - OSGi:条件权限管理员或用户管理员