Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟已标记为可访问的私有方法的返回值_Java_Mocking_Mockito_Private Methods - Fatal编程技术网

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中。