Java 有没有办法模拟私有方法,它在其他类中存在

Java 有没有办法模拟私有方法,它在其他类中存在,java,junit,mockito,powermockito,Java,Junit,Mockito,Powermockito,据我所知,我们可以使用PowerMockito在同一个类中模拟私有方法 同一个类中的With对我来说很好,但是当我从另一个类调用私有方法时,它不起作用 在下面的示例中,我有两个类,服务类和助手类 具有私有方法的Helper类 @RunWith(PowerMockRunner.class) @PrepareForTest({Helper.class,Service.class}) @PowerMockIgnore(“javax.management.*”) 公共类EPartnerBatchServ

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

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

在下面的示例中,我有两个类,服务类和助手类

具有私有方法的Helper类

@RunWith(PowerMockRunner.class)
@PrepareForTest({Helper.class,Service.class})
@PowerMockIgnore(“javax.management.*”)
公共类EPartnerBatchServiceTest{
私人佣工;
@注射模拟
私有服务类服务类;
@以前
public void setUp()引发异常{
helper=PowerMockito.spy(newhelper());
ServiceClass=PowerMockito.spy(新ServiceClass());
initMocks(this);
}
@试验
public void testUpdateIndividualUserStatus()引发异常{
doReturn(“测试”).when(helper,“privateMethod”、anyString()、Matchers.anyObject());
字符串响应=serviceClass.update(loggerId,activityLogDTO);
}
}
示例类:

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

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

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

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


您可以在这里找到很好的示例:

显示这两个类定义的可能重复。这个问题目前的状态是不完整的,因此不清楚。它不是精确的考题,为了简单的理解,我修改了它。Mohamed Sweelam:你说的是正确的,但是在同一个类中模拟私有方法是有用的。我想在其他类中模拟private(),可能需要一个更完整的示例,但是如果类“a”正在执行“new B()”,那么您可能缺少“PowerMockito.whenNew(B.class).withNoArguments()。然后返回(someSpyBInstance);”,来自您的测试。谢谢您的帮助。在我的情况下,下面的代码为我工作。PowerMockito.whenNew(B.class).withNoArguments().thenReturn(someSpyBInstance);我很高兴我能帮上忙,关于我谈论过的关于不用担心私有方法的观点,这不是一成不变的声明。即使在我工作的地方,我们也经常讨论这个话题,并试图为我们谈论的每个案例找到更好的方法。从单元测试的角度来看,我认为在测试代码的每个小单元时都有一个很好的逻辑,所以。。。这实际上取决于你的测试内容、原因和时间。