微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JMockit 验证是否调用了私有方法

如何解决JMockit 验证是否调用了私有方法

我正在测试一个公共方法,我想验证是否调用一个模拟参数的私有方法。 我找到的所有答案都使用 invoke 方法,但自 JMockit v1.36 以来已被删除

public class ClasstoTest{

   public void methodTotest(){
     DependencyClass abc = new DependencyClass();
     if(privateMethod1()){
        privateMethod2(abc);
     }
   }
   
   private boolean privateMethod1(){ return true; }
   
   private void privateMethod2(DependencyClass abc){ abc.doStuff(); }
}

public class testClasstoTest{
   
   @Mocked
   DependencyClass abc;
   
   @Tested 
   ClasstoTest testedClass;

   @BeforeEach
   public void setUp() { 
     testedClass = new Classtotest();
   }
    
   @Test
   public void testMethod(){
        new MockUp<ClasstoTest>() {
            @Mock
            private boolean privateMethod1() {
                return true;
            }
        };
        
        testedClass.methodTotest();

        new FullVerificationsInorder() {{
            abc = new DependencyClass();
            //Check here if privateMethod2(abc) gets called once
        }};
   }

解决方法

你有两种方法:

  1. 要将您的方法的范围从私有升级到包私有,然后您的方法将在测试中可见。
  2. 重构您的代码并将私有方法封装到 Predicate 中,然后您可以分别测试您的主要方法和 Predicate。

您无法通过 Junit 测试私有方法。

,

您可以使用 Powermock 来模拟和验证私有方法。

请检查https://github.com/powermock/powermock/wiki/MockPrivate

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。