如何断言引发异常后未调用方法? - java

我有一个方法发布到API,然后在方法内调用之后执行其他业务逻辑。如果发布到API时由于某种原因出了问题,则API返回一个异常。我不想捕获此异常,因为我不想代码继续执行。到目前为止,在我的单元测试中,我已经模拟了API并编写了when(APIService.postDetails(any())).thenThrow(Exception.class),并且断言我已经验证了其中一些方法已通过模仿者中的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:“自动装配”继承与依赖注入 - java

Improve this question 我通常以常见的简单形式使用Spring框架: 控制器服务存储库通常,我会在CommonService类中放一个通用服务,并使所有其他服务扩展到类中。一个开发人员告诉我,最好在每个服务中插入CommonClass而不是使用继承。我的问题是,有一个方法比另一个更好吗? JVM或性能是否会受到另一个影响?更新资料Comm…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java DefaultSslContextFactory密钥库动态更新 - java

我有一个使用org.restlet.engine.ssl.DefaultSslContextFactory的现有应用程序和一个在服务器启动时加载的密钥库文件。我有另一个应用程序,该应用程序创建必须添加的证书服务器运行时动态地更新到密钥库文件。为此,我在代码中创建了证书和私钥,然后将其写入到目录。该目录由bash脚本监视,该脚本检查是否有新文件,如果出现,它将…