【问题标题】:Mocking an interface with nested static class使用嵌套的静态类模拟接口
【发布时间】:2021-01-11 10:01:47
【问题描述】:

我有一个无法更改的接口及其实现。 界面如下:

public Interface IHello{
// ... some method declarations
     public static class IoH{
          static IHello hello = new IHello.IoH.HelloImpl();
          public IoH(){}
          
          public static IHello getHello(){
              return hello;
          }

          private static class HelloImpl implements IHello{ 
              // .... constructor and methods....
          }
     }
}

我还得到了一个 IHello 接口的实现,Hello(它是 final 类),它只是覆盖了 IHello 接口的功能,没有做任何其他事情。这意味着它没有使用接口的任何嵌套部分。

它现在在代码中的某处被用作:

String string = IHello.IoH.getHello().getInfo(); // getInfo()  is method of interface

我正在进行单元测试,我想使用 MockImplementation 模拟此 IHello.IoH.getHello()IHello.IoH.getHello().getInfo() IHello 接口和使用 Mockito 注入一些 bean...

我该怎么做?

【问题讨论】:

  • 请创建这样的接口的人应该....无论如何,如果您使用 Mockito 3.4.0 或更高版本,您可以通过MockedStatic 尝试解决它
  • 感谢您的帮助!我浏览了文档并找到了这个。终于解决了。

标签: java spring spring-boot unit-testing mockito


【解决方案1】:

我用过 Mockito 3.4.0 版并用过 MockedStatic

MockedStatic<IHello.IoH> mocked = Mockito.mockStatic(IHello.IoH.class);
mocked.when(IHello.IoH::getHello).thenReturn(new MockHello());

MockHello 是您的模拟想法的简单实现,覆盖接口的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2016-01-15
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2019-10-15
    相关资源
    最近更新 更多