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

使用Mockito存根和执行测试方法

鲜于高明
2023-03-14

我最近问了几个面向jUnit和Mockito的问题,但我仍然很难掌握其中的诀窍。这些教程都是针对非常简单的示例,所以我很难扩展我的测试用例来为我的类工作。

我目前正试图为我在WebApp中的一个代理中的一个方法编写一些测试用例。该方法与代理内部的几个其他方法交互,以验证某些对象。我现在只想测试一下这个方法。

使用Mockito设置存根(希望是正确的术语)。如下所示:

mockito.when(MockmyAgent.othermethod(Mockito.any(arg1)).thenreturn(requiredReturnArg);

尝试执行我的方法,如下所示:

似乎我目前的方法不是一个正确的测试风格,但我不知道如何前进。我是否可以模拟我的类,让一个方法像普通方法一样执行,而其他方法被存根以返回给定的值,这样在测试这个方法时就不必处理数据访问了?

共有1个答案

仲孙凡
2023-03-14

您将mockspy混淆了。

在模拟中,所有方法都被截断并返回“智能返回类型”。这意味着,除非指定行为,否则调用模拟类上的任何方法都不会执行任何操作。

在spy中,类的原始功能仍然存在,但是您可以在spy中验证方法调用,还可以重写方法行为。

MyProcessingAgent mockMyAgent = Mockito.spy(MyProcessingAgent.class);
static class TestClass {

    public String getThing() {
        return "Thing";
    }

    public String getOtherThing() {
        return getThing();
    }
}

public static void main(String[] args) {
    final TestClass testClass = Mockito.spy(new TestClass());
    Mockito.when(testClass.getThing()).thenReturn("Some Other thing");
    System.out.println(testClass.getOtherThing());
}
Some Other thing

注意:你真的应该试着模仿被测试的类的依赖关系,而不是类本身。

 类似资料:
  • 问题内容: 我最近已经问了几个有关jUnit和Mockito的问题,但我仍然很努力地把握住这个问题。这些教程都是针对非常简单的示例的,因此我正在努力扩大测试用例以适合我的课程。 我目前正在尝试为Webapp中我的一个代理中的方法编写一些测试用例。该方法与代理内部的其他两种方法交互以验证某些对象。我现在只想测试这种方法。 这是我尝试做的事情: 创建我的代理的Mockito对象,如下所示: 使用Moc

  • 我试图通过在传入字符串“John”时返回一个用户对象来建立类(spring-data-jpa存储库)的方法。 发生的情况是,在userService中,当调用users.findbyUsername(“John”)时,它总是返回null,而不是我定义的任何用户对象: 当我在测试方法中放置断点并比较users和UserService.users时,它们是相等的。 pom版本

  • 我正在尝试运行一个使用Mockito的JUnit cucumber测试。这是我遇到的问题。在我的cucumber赛跑课上,我有 在我的常规JUnit测试中 鉴于我一次只能有一个@RunWith,我如何将Mockito与cucumber结合使用呢?

  • 我使用JUnit4和Mockito创建了一个Spring Boot2应用程序。当我测试某种方法时。会出现这样的例外: 这是我的测试代码 SuveryService.java SurveyRepository.java 我引用了这篇文章Mockito NullPointerException,但这个问题仍然存在。任何帮助都将被应用。

  • 问题内容: 我已经开始发现Mockito库,并且有一个我没有找到正确答案的问题。 例如,如果我的UserDAO类中有将用户保存到数据库中的此类方法: 我应该如何测试? 如果我想测试一个DAO类,那么我需要创建一个模拟,模拟,模拟等吗?如此不测试数据库本身? 但是,如果我还想测试dao和数据库的行为怎么办? 您能否提供一些代码示例,可能有用的链接,并显示实现此目的的最佳方法? 问题答案: 这是使用M

  • 问题内容: 有人可以帮我这个忙。我正在使用Jersey休息测试框架版本2.21(在Grizzly容器上)编写Rest资源的单元测试。 当我调试测试类时,看到myManager的模拟对象。但是,当调试进入“ MyResouce类”时,myManager对象将变为null并得到NullPointer异常。 尝试过其他人提供的解决方案,但是没有运气。请有人帮我。我将近三天就遇到这个问题。:( 我的资源类