如何用 mockito 模拟最后一堂课

新手上路,请多包涵

我有最后一堂课,是这样的:

 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 类。我怎样才能用 Mockito 做到这一点?

原文由 buttowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 334
2 个回答

Mockito 2 现在支持最终 类和方法!

但就目前而言,这是一个“孵化”功能。它需要一些步骤来激活它,这些步骤在 What’s New in 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());

在后续的里程碑中,该团队将带来一种使用此功能的编程方式。我们将确定所有不可模拟的场景并为其提供支持。请继续关注,请让我们知道您对此功能的看法!

原文由 WindRider 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题