【问题标题】:How to test private method in junit Springboot如何在junit Spring Boot中测试私有方法
【发布时间】:2020-08-05 02:09:15
【问题描述】:

我需要测试私有方法。以下方法的正确测试方法是什么?我尝试使用 Mockito when.. 但是我如何模拟私有方法。我认为我们不能模拟私有方法。

    private classObject privateMethod(Message message){
        try{
           Objectmapper mapper = new ObjectMapper();
           return mapper.readValue(message.getBody(), ClassName.class);
        }catch(){
           throw new Exception(); 
        }
    }

    //I am getting an exception while testing

    byte[] body = {10,-11,12,14,15};
    MessageProperties msgProp = new MessageProperties();
    Message message = new Message(body, msgProp);

    // the above message is passed as parameter to function through                           
    // which private method is called
    objectxyz.execute(message);

    // execute method
    public void execute(Message message){
        objectxyz xyz = privateMethod(message);
        objectabc abc = service.someMethod(xyz);
        List<object> list = someAnotherMethod(abc, xyz);
    }

    // I tried below code in my test case and have used 
    // @Mock private ObjectMapper objectMapper;
    Mockito.when(objectMapper.readValue(body, ClassName.class)).thenReturn(classObject);

【问题讨论】:

  • 好的,现在我理解了这个概念,但是如果我们想测试公共方法,即执行,包括返回私有方法和私有方法返回 mapper.readValue(message.getBody(), ClassName.class);失败了我们如何才能成功测试执行方法?

标签: java spring-boot junit mockito


【解决方案1】:

Spring boot 没有什么特别之处:

不应测试私有方法 - 它是类的内部“方法”,您应该主要测试类的 API - 它通过非私有方法向类用户公开的“功能”。

考虑将一个类视为一个黑盒(可能带有此类的模拟依赖项)并按照我的解释检查其功能。

【讨论】:

    【解决方案2】:

    您可以使用流形框架通过反射进行测试。请参阅此先前回答的解决方案:How do I test a private function or a class that has private methods, fields or inner classes?

    【讨论】:

      【解决方案3】:

      是的,私有方法应该是内部方法,应该由另一个公共方法使用,所以。不要测试它;

      【讨论】:

        【解决方案4】:

        这些是测试私有方法的基本方法。

        1. 不要测试私有方法。
        2. 授予方法包访问权限。
        3. 使用嵌套测试类。
        4. 使用反射。

        Detail article

        【讨论】:

          猜你喜欢
          • 2021-12-26
          • 2018-12-23
          • 2020-01-20
          • 1970-01-01
          • 1970-01-01
          • 2021-01-24
          • 2019-01-09
          • 2017-06-06
          • 2020-05-29
          相关资源
          最近更新 更多