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

qcuzuvrc  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(573)

我正在测试一个公共方法,我想验证是否调用了一个私有方法,该方法模拟了params。我找到的所有答案都是使用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
        }};
   }
5q4ezhmt

5q4ezhmt1#

你有两种方法:
将方法的作用域从private升级到package private,然后,方法将在测试中可见。
重构代码并将私有方法封装为 predicate ,然后可以分别测试主方法和 predicate 。
不能用junit测试私有方法。

5cg8jx4n

5cg8jx4n2#

您可以使用powermock来模拟和验证私有方法。
请检查https://github.com/powermock/powermock/wiki/mockprivate

相关问题