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

新实例上的Mock方法

元彦君
2023-03-14

我试图使用Mockito框架和Junit5创建JUnit测试用例。我正在处理下面的代码

    Class ClasstToBeTested {
      FirstClass a = new FirstClass();

      public String methodToBeTested() {
         String str = a.firstMethod();
         return str;
      }
    }

   Class FirstClass {
      SecondClass b = new SecondClass();

      public String firstMethod() {
          String str = b.secondMethod();
          return str;
      }
   }

我有一个像上面这样的类结构,我需要模仿第二种方法。

我试过@spy on FirstClass并嘲笑SecondClass和secondMethod,但嘲笑没有发生。在这种情况下我怎么能嘲笑呢?

注:我不能改变班级结构。

共有1个答案

晏树
2023-03-14

你有一些选择:

  1. (首选)使用IoC依赖注入来提供第二类实例,而不是在第一类中构建它:
  class FirstClass {
      private final SecondClass b;

      // Injecting the SecondClass instance
      FistClass(SecondClass b) {
          this.b = b;
      }

      public String firstMethod() {
          String str = b.secondMethod();
          return str;
      }
   }

然后你可以在测试中注入一个模拟。

   class FirstClass {
      SecondClass b = new SecondClass();

      // Annotate with a visibility for test annotation if available.
      // Here one can inject a mock too, but can cause problems if used inadvertently.
      void setSecondClassForTests(SecondClass b) {
         this.b = b;
      }

      public String firstMethod() {
          String str = b.secondMethod();
          return str;
      }
   }

然后在测试中调用setter并通过模拟。

final Field declaredField = instanceOfFirstClass.getClass().getDeclaredFields("b");
declaredField.setAccessible(true);
declaredField.set(instanceOfFirstClass, yourMockedInstance);
 类似资料:
  • 我尝试运行此测试: 但是我得到了NullPointer异常: Mockito.when 我错过了什么?

  • 本文向大家介绍php新建文件的方法实例,包括了php新建文件的方法实例的使用技巧和注意事项,需要的朋友参考一下 php文件如何新建?具体步骤如下: 在桌面空白处单击右键 -> 新建 -> 文本文件。 双击打开此文本文件后,在里面输入PHP代码,输入完后,选择文件 -> 另存为... 这里输入你的PHP文件名,扩展名为PHP。 当然你也可以用网页编辑工具,更直观和方便。如:Dreamweaver,直

  • 本文向大家介绍Ajax实现局部刷新的方法实例,包括了Ajax实现局部刷新的方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 最近复习了一下jQuery的一些内容,特此整理一下一些能用的得到的知识点,以前才学jQuery的时候压根就没有注意到那么多的细节,另外最近一直都在整理前端的一些工作中学到的小经验,大概还会有十篇左右的内容,就会慢慢开始整理后端,框架,以及数据库的一些小知识点 一、 Aj

  • 本文向大家介绍ubuntu上安装python的实例方法,包括了ubuntu上安装python的实例方法的使用技巧和注意事项,需要的朋友参考一下 怎么在ubuntu安装python? python在ubuntu下有几种安装方法: ● 通过ubuntu官方的apt工具包安装 ● 通过PPA(Personal Package Archive) 的apt工具包安装 ● 通过编译python源代码安装 通过

  • 问题内容: 我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象: 我希望能够调用并拥有两个有机体类型的对象。此时我的方法如下所示: 并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有)一样,该副本是可访问的? 问题答案: 另一个选项-如果方法中未使用实例(): 这样可以确保生物产

  • 要在实例上调用方法,您必须获取实例的引用并调用该方法。该示例说明了如何获取引用和调用方法,检查 API 以获取可用方法的列表。 // 3 ways of doing the same thing $('#jstree').jstree(true) .select_node('mn1'); $('#jstree') .jstree('select_node', 'mn2'); $.