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

如何用mockito模拟最后一节课

韩鸿波
2023-03-14

我有最后一节课,大概是这样的:

public final class RainOnTrees{

   public void startRain(){

        // some code here
   }
}

我在其他类中使用这个类,如下所示:

public class Seasons{

   RainOnTrees rain = new RainOnTrees();

   public void findSeasonAndRain(){

        rain.startRain();

    }
}

Seasons.java的JUnit测试类中,我想模拟RainonTrees类。我怎么能用莫基托做到这一点?

共有2个答案

曾航
2023-03-14

摩基托2现在支持最终的类和方法!

但就目前而言,这是一个“孵化”功能。它需要一些步骤来激活它,这些步骤在Mockito 2的新内容中描述:

对最终类和方法的嘲弄是一个潜移默化的、可选的特性。它使用Java代理检测和子类化的组合,以支持这些类型的可模仿性。由于此功能与我们当前的机制不同,并且此功能有不同的限制,并且由于我们希望收集经验和用户反馈,因此必须显式激活此功能才能可用;通过mockito扩展机制,可以创建文件src/test/resources/mockito-extensions/org.mockito.plugins.mockmaker,其中包含一行:

mock-maker-inline

创建此文件后,Mockito将自动使用此新引擎,您可以执行以下操作:

 final class FinalClass {
   final String finalMethod() { return "something"; }
 }

 FinalClass concrete = new FinalClass(); 

 FinalClass mock = mock(FinalClass.class);
 given(mock.finalMethod()).willReturn("not anymore");

 assertThat(mock.finalMethod()).isNotEqualTo(concrete.finalMethod());

在后续的里程碑中,团队将带来一种使用该特性的编程方式。我们将识别并为所有不可模仿的场景提供支持。请继续关注并告诉我们您对此功能的看法!

拓拔耀
2023-03-14

仅在MockitoV2中可以模拟最终/静态类/方法。

在您的分级文件中添加以下内容:

testImplementation 'org.mockito:mockito-inline:2.13.0'

这在Mockito v1中是不可能的,从Mockito常见问题:

Mockito的局限性是什么

>

  • 需要Java 1.5+

    无法模仿最终类

    ...

  •  类似资料:
    • 问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are

    • 我尝试测试一个发送jms消息的类,但无法模拟JmsTemplate JmsProducer.class: JmsProducerTest。类别: 当我运行这个测试用例时,它给了我:java。lang.IllegalArgumentException:对象不是声明类的实例 你对这个问题有什么想法吗?

    • 我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi

    • 我的测试存根是 我在这里做错了什么?

    • 我想通过ts-Mockito@2.5.0创建一个类的模拟对象,但我无法正确设置它。 以下是设计的测试用例: 正如测试用例所暗示的,我希望从我的模拟中返回“I AM mocked”的值。 我应该如何设置模拟,使其按预期工作? 旁白:这个测试用例只是为了展示我正在经历的奇怪行为。这不是我真正的测试。我想在不同服务的单元测试中使用模拟。)

    • 是模拟抽象类:,而是接口。这是失败点: 如何模拟这段代码?