有没有办法模拟其他类中的private方法

时间:2019-11-20 10:30:58

标签: java junit mockito powermockito

据我所知,我们可以使用PowerMockito模拟同一类中的私有方法。

在同一个类中使用对我来说很好,但是当我从另一个类中调用私有方法时,它不起作用。

在下面的示例中,我有2个类,Service类和Helper类

具有私有方法的Helper类。

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({ Helper.class,Service.class })
    @PowerMockIgnore("javax.management.*")
    public class EPartnerBatchServiceTest {

        private Helper helper;

        @InjectMocks
        private ServiceClass serviceClass;

        @Before
        public void setUp() throws Exception {
            helper = PowerMockito.spy(new Helper());
            ServiceClass = PowerMockito.spy(new serviceClass());
            MockitoAnnotations.initMocks(this);
        }

        @Test
        public void testUpdateIndividualUserStatus() throws Exception {

            PowerMockito.doReturn("Test").when(helper, "privateMethod", anyString(), Matchers.anyObject());

            String response = serviceClass.update(loggerId, activityLogDTO);

        }
    }

样本类别:

Class A{
    value=new B().method1();
}

Class B{
    public method1(){
     value = method2();   
    }

    private method2(){
     return "Test";   
    }
}

1 个答案:

答案 0 :(得分:0)

您不必担心显式测试您的私有方法,因为调用它们的人无法访问它们,因此应该在您的公共方法流程中的某处测试它的功能。但是,如果由于某种原因需要显式测试它们,则也许可以进行反思并将这些方法设置为可访问以进行测试可能会解决您的问题。

您会在这里找到很好的例子:https://www.baeldung.com/java-method-reflection