Java 模拟已标记为可访问的私有方法的返回值
我的单元测试:Java 模拟已标记为可访问的私有方法的返回值,java,mocking,mockito,private-methods,Java,Mocking,Mockito,Private Methods,我的单元测试: @Test public void testDoSomething() { Method m = MyClass.class.getDeclaredMethod("methodToBeMocked"); m.setAccessible(true); MyClass myClass = spy(new MyClass()); //m.invoke(myClass); // Calling this invokes the private method correc
@Test
public void testDoSomething() {
Method m = MyClass.class.getDeclaredMethod("methodToBeMocked");
m.setAccessible(true);
MyClass myClass = spy(new MyClass());
//m.invoke(myClass); // Calling this invokes the private method correctly
when(myClass.methodToBeMocked()).thenReturn("DummyReturn"); // This line throws the compiler error
myClass.doSomething(); // This is the method I'm trying to test
}
这是我得到的编译器错误:
The method methodToBeMocked() from the type MyClass is not visible
这是MyClass
public MyClass {
public MyClass() {}
public void doSomething() {
..
methodToBeMocked();
..
}
private String methodToBeMocked() { // Need to mock return value
return "Default";
}
}
错误消息是不言自明的 MyClass类型中的methodToBeMocked()方法不可见 该方法不可见的原因是它是一个
private
方法。私有方法只能在其定义的类内调用。如果希望从任何地方都可以访问该方法,请将该方法公开
publicstringmethodtobemocked(){//需要模拟返回值
返回“默认”;
}
是否有办法避免将方法公开?如果测试类与MyClass位于同一个包中,则不使用PowerMock,可以使方法
受到保护。或者您可以将测试方法移动到MyClass中。