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

如何验证一个方法在另一个方法中被调用,而这个方法总是抛出异常?

陆文康
2023-03-14

我正在测试一个带有预期异常的方法。我还需要验证在抛出异常后是否调用了一些代码(在模拟对象上),但忽略了验证。这是代码:

public class ExceptionHandler {

    @Autowired
    private Sender sender;

    public void handle(Exception exception) throws Exception {
      if (!SomeException.class.isAssignableFrom(exception.getClass())) {
        sender.sendMessage(ExceptionUtils.getStackTrace(exception));
      }
      throw exception;
    }
}

这是测试代码:

@Mock
private Sender sender;

@InjectMocks
private ExceptionHandler handler;

@Test
public void testHandler() throws Exception {
    SomeException someException = new SomeException();

    try {
        handler.handle(someException);
    } catch (SomeException thrownResult) {
        assertEquals(someException, thrownResult);
    }

    verify(sender, times(1)).sendMessage(Mockito.anyString());
}

共有1个答案

严兴旺
2023-03-14

我还需要验证在抛出异常后调用了一些代码(在一个被模仿的对象上),但是验证被忽略了。

这不是真的,这一行实际上是执行的:

verify(sender, times(1)).sendMessage(Mockito.anyString());

但是验证失败,出现以下错误:

需要但未调用:sender . sendmessage();

实际上,与这个模拟没有任何互动。

正如预期的那样,该方法永远不会被调用,因为条件!SomeException.class.isAssignableFrom(exception.getClass())不满足-您使用的实例handler.handle调用某些异常

 类似资料:
  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 问题内容: 所以我基本上想做的很简单 由于某种原因,它无法正常工作。在我的Javascript控制台(Chrome浏览器)中 编辑1:我已经添加了实际的代码,如您所见,我在构造函数中绑定了validateEmail 问题答案: 您的方法已正确定义,因此问题出在如何 调用上 。 您以一种设置为实例以外的方式调用它。这在事件侦听器中很常见。我想您的代码中有一些类似的代码: React 的推荐解决方案是

  • 我需要了解如何将方法返回到方法中,以打印出计算机的随机选择。 打印语句之后的最后一个方法不完整;我只是被这部分卡住了。

  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。

  • 问题内容: 我使用的是Spring 4,我注意到了一个奇怪的行为……如果我从普通实例方法多次调用异步方法,那么它们都将在不同的线程中调用,并在随机时间完成。但是,如果我多次从另一个异步方法中调用一个异步方法,那么它们将按顺序完成。我有这样的事情: 我正在使用默认的异步执行器。我应该换一个吗?但是,该执行程序不会重用任何线程,而是每次都启动另一个线程,因此应该没问题……这仅仅是巧合吗?但是我尝试了十