java - 如何从mockito中的另一个包访问 protected 方法?

标签 java testing mocking mockito

假设我有一个这样的类(class):

//this is src/a/b
package a.b;

class C 
{
     protected Api getApi();
}

并像这样进行测试:

//and this is test/a/d
package a.d;

class TestE {
     @Test
     public void test()
     {
          C mockedC = spy(new C());
          doReturn(*somemockedapi*).when(mockedC).getApi(); // this one doesn't work!
          .....
     } 
} 

如果测试中的类位于tests/a/b 中,它将起作用,但这不是解决方案,因为我们需要访问src/a/d 中的一些内容。显然这个函数可以通过继承来访问,那么在这种情况下有没有办法让mockito模拟它呢?

最佳答案

这可能非常危险,但可以做到。

//reflectively get the method in question
Method myMethod = mockedC.getClass().getDeclaredMethod("getApi");

//manually tell java that the method is accessible
myMethod.setAccessible(true);

//call the method
myMethod.invoke(myClass, null);

//PLEASE SET THE FIELD BACK TO BE UNACCESSIBLE
myMethod.setAccessible(false);

关于java - 如何从mockito中的另一个包访问 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995596/

相关文章:

java - 如何使用Java将字符串发送到服务器?

java - 如何创建内部结构复杂的列表

java.lang.RuntimeException : Stub! - Android 代码覆盖率?

android - 可以将 Beta 版应用程序作为 .apk 分发给亲朋好友进行测试并获得反馈吗?

ruby - 使用 RSpec 模拟 TCPSocket

unit-testing - 单元测试 - 数据库和固定装置

unit-testing - 如何在另一个方法中 stub

java - 调用 Bundle.getParcelable 时收到 NullPointerException

java - OSX UnsatisfiedLinkErrors 在 OSX catalina 10.15.x 上运行 JNI 包装的库

ruby - 在放置前按下 shift|control 键拖放对象