首页 > 解决方案 > 有什么方法可以模拟其他类中的私有方法

问题描述

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

在同一个班级对我来说工作正常,但是当我从另一个班级调用私有方法时它不起作用。

下面的示例我有 2 个类,Service 类和 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";   
    }
}

标签: javajunitmockitopowermockito

解决方案


您不必担心显式测试您的私有方法,因为调用它的人无法访问它们,它的功能应该在您的公共方法流程中的某个地方进行测试。但是,如果由于某种原因您需要明确地测试它们,那么反射和将这些方法设置为可访问的测试可能会解决您的问题。

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


推荐阅读