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

有什么方法可以避免这个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块在Java中可以有多个catch块吗?,包括了一个try块在Java中可以有多个catch块吗?的使用技巧和注意事项,需要的朋友参考一下 是的,单个try块可以有多个catch块。 示例 以下Java程序包含一个数字数组(显示)。从用户那里,它接受此数组中的两个位置,然后将第一个位置的数字除以第二个位置的数字。 输入值时- 如果选择的位置不在显示的数组中,则抛出Array