当前位置: 首页 > 知识库问答 >
问题:

有什么方法可以避免这个Mockito测试的try/catch块?

鄢英哲
2023-03-14

在传递给CompletableFutureThenAccept()方法的lambda中,我验证是否使用预期值调用了Session.SendMessage()方法:

WebSocketSession session = mockWebSocketSession();
TextMessage expectedMessage = new TextMessage("test text message");

sender.sendStringMessage(session, "test text message").thenAccept(nil -> {
    try{ // this is what I am talking about
        verify(session).sendMessage(expectedMessage);
    }catch(IOException e){}
});

由于sendMessage()方法抛出一个IOException,我被迫在lambda内部的调用周围添加一个无用的try/catch块。这是不必要的冗长。

我怎么能避免呢?

共有1个答案

端木朝
2023-03-14

我会用这种方法重新设计你的测试

final String testMessage = "test text message";
WebSocketSession session = mockWebSocketSession();

sender.sendStringMessage(session, testMessage).get(); // will wait here till operation completion

verify(session).sendMessage(new TextMessage(testMessage));

并将IOException添加到测试方法签名中。

此解决方案解决了2个问题:

    null
 类似资料:
  • 问题内容: 我了解到try catch语句的finally子句始终执行。但是有人对我说,有可能避免执行它(删除它不是一种选择)。 -有人怎么可能? -我也很好奇知道为什么有人要避免执行它? 问题答案: 使用该块中未捕获的异常将其杀死,或者将整个JVM杀死(这将杀死线程)。 除了不良的设计外,没有充分的理由停止执行块。如果不应该每次都运行它,则不要将其放在一个块中。 使用下面的测试代码,我运行了两种

  • 为什么可能是这种测试要避免的事情。 我在对这个答案的评论中读到了这一点:https://stackoverflow.com/a/21172873/516167 标记应在其上进行注射的字段。 允许速记模拟和间谍注入 最小化重复模拟和间谍注入 参考:@InjectMocks JavaDoc。

  • 因为这个方法是在运行时执行的,所以需要对它进行测试吗

  • 我是Keras的新手,正在尝试实施解相关批次规范文件(https://arxiv.org/abs/1804.08450)作为一种学习体验。该层与标准批次规范非常相似,只包含一些附加组件。 我们现在将数据居中并应用白化变换,通过对协方差矩阵进行特征值分解来计算白化变换,而不是将输入数据集中到每个层并通过方差进行归一化。 整个过程在论文(算法1,第5页)中有明确的阐述,仅由5个等式组成,我在下面的代码

  • 理想的情况下,我希望我的应用程序只有顶级的try/catch,大多数的例外只是冒出来。但有了它,您将得到UnhandledPromiseRejectionWarning。 我的问题是,而不是再放一个。后面抓。那么,有没有办法绕过?谢谢!

  • 问题内容: 我读到try-with-resources 中的块是可选的。我试图在try-with- resources块中创建一个对象,没有后续块,只是从eclipse中获取编译器错误:“ 自动调用引发了未处理的异常类型。” 由于可以在try-with- resources中使用的每个资源都实现了,因此在调用该方法时可能会引发异常,因此我不明白该子句是可选的,因为它不允许我跳过从中捕获异常的过程。