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

Junit5和mockito的测试错误处理方法怪异

李良策
2023-03-14
class Foo{

    private BarService bar;

    public int MethodToTest(){

        try{
            bar.methodThatThrows();
            return 1;
        }catch(Exception e){
            return 0;
        }
    }
}
class FooTest{

    private IBarService barService = mock(BarService.class);

    @Test
    TestMethodToTest(){

        when(barService.methodThatThrows()).thenThrow(new Exception("message");
        Foo foo = new foo();
        ReflectionTestUtils.setField(foo, "barService", barService);
        assertEquals(foo.MethodToTest(), 0);
    }
}

共有1个答案

桂志新
2023-03-14

很可能您在测试中抛出了一个未为MethodThatThrows声明的检查异常

您在测试中声明的一条消息确实会打印到控制台,但该消息的信息量更大:

org.mockito.exceptions.base.MockitoException: 
Checked exception is invalid for this method!
Invalid: java.lang.Exception: message

例如(在BarService中声明了IOException,但在测试代码中抛出了一个更一般的检查异常):

public class BarService {
    public int methodThatThrows() throws IOException {
        return 1;
    }
}
 类似资料:
  • 我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费大量的时间在进行故障排除和测试,外界都觉得我们程序员是设计师,能够把一个系统从无做到有,是一项很伟大的工作,而且是相当有趣的工作,但事实上我们每天都是徘徊在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时

  • 错误码分析 (OTG-ERR-001) 栈追踪分析 (OTG-ERR-002)

  • 我在单元测试下面的Spring MVC控制器方法: 上面的自定义注释()基本上是由以下方面建议的: 如果抛出了一个,则会启动以下控制器建议异常处理程序: 现在,以下是我如何尝试测试上述控制器方法: 测试系统地失败了,下面的堆栈跟踪: 我不确定我和莫奇托有什么问题... 注意,我确实在路径中指定了,这表明我的模拟应该在方面中返回true,并允许控制器方法继续。然而,事实并非如此。 谁能帮忙吗?

  • 我有一套硒测试。例如,有时“断言声明”会失败。在某些情况下,这可能是因为有人破坏了某些东西,而用户界面点击顺序的结果是一个错误,导致网站的错误页面被显示。 如何检查是否每一次失败都发生了这种情况,而不必在任何地方实现对以下方法的调用? 目的是简单地通过电子邮件发送显示页面的html源,如果该页面被证明是一个错误页面。

  • 我想在同一个类中模拟一个void方法,这个方法正在用mockito测试中。我可以用@spy注释not void方法,然后使用下面的代码返回我想要的数据。 每个依赖项都是用@mock模拟的。

  • Go 没有像 Java 和 .NET 那样的 try/catch 异常机制:不能执行抛异常操作。但是有一套 defer-panic-and-recover 机制(参见 13.2-13.3 节)。 Go 的设计者觉得 try/catch 机制的使用太泛滥了,而且从底层向更高的层级抛异常太耗费资源。他们给 Go 设计的机制也可以 “捕捉” 异常,但是更轻量,并且只应该作为(处理错误的)最后的手段。 G