【问题标题】:Mockito's thenCallRealMethod , not calling public methodMockito 的 thenCallRealMethod ,不调用公共方法
【发布时间】:2019-01-11 09:31:46
【问题描述】:

我试图在我的测试类中调用真正的方法。 有两种方法,一种是映射器类中的公共 void m2() 和另一种私有 void m3()。 但这里只有私有方法被执行,公共方法没有被调用。 示例代码是这样的。

public class Service {

    @Autowired
    Mapper mapper;

    public void m1(String s){
        System.out.println(s);
        mapper.m1(s);
    }
}

public class Mapper {

    public String m1(String s){
        System.out.println("inside m1 method" +s);
        m2();
        m3();
        return s;
    }

    public void m2(){
        System.out.println("inside m2 public method");
    }

    private void m3(){
        System.out.println("insid m3 private method");
    }
}

@RunWith(MockitoJUnitRunner.class)
public class Testing {

    @Mock
    Mapper mapper;

    @InjectMocks
    Service service;


    @Test
    public void test(){
    when(mapper.m1(Mockito.any(String.class))).thenCallRealMethod();

    service.m1("Check");
    }

    /**
     * @param m1
     */

}

【问题讨论】:

  • 首先,您有 2 个公共方法和 1 个私有方法。其次,您不会模拟第二个公共方法,这就是为什么您没有获得该方法的输出

标签: java junit mockito


【解决方案1】:

没有调用公共方法,因为您没有指示 mock 这样做。

调用私有方法是因为 mockito 不影响私有方法(你必须召唤 PowerMock 的黑魔法才能这样做)。

【讨论】:

  • 感谢@talex,对调试很有帮助。
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 2011-08-16
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多