【问题标题】:How to invoke private method in enum type with mockito如何使用 mockito 调用枚举类型的私有方法
【发布时间】:2017-12-20 15:41:28
【问题描述】:
public enum SPHttpClient {
    ;

private static fun(clientInstance) {
    HttpPost postRequest;
    /* some processing*/
    clientInstance.execute(postRequest);
    // I need to mock this execute statement
 }

}

在私有方法 fun 上编写 Junit 测试,

如何调用 ENUM 类型的私有方法,还要模拟通过私有方法参数传递的 clientInstance?

SPHttpClient spHttpClient;
final Method method = spHttpClient.getClass().getDeclaredMethod("fun", HttpClient.class);
        method.setAccessible(true);
        Object actual = method.invoke(spHttpClient, mockHttpClient);

我认为getclass 不适用于枚举??

【问题讨论】:

  • clientInstance 来自哪里?
  • clientInstanceHttpClient 对象的类型,它作为参数传递给fun 函数

标签: junit enums mockito


【解决方案1】:

invoke 的签名是invoke(Object obj, Object... args)obj 必须是 this-Object。由于您的方法是静态的,因此没有 this 对象,您可以传递 null,但不能省略它,即以下工作:

final Method method = SpHttpClient.class.getDeclaredMethod("fun", HttpClient.class);
method.setAccessible(true);
Object actual = method.invoke(null, mockHttpClient);

【讨论】:

  • 使用spHttpClient.getClass()可以得到ENUM类型的方法吗?
  • 使用SPHttpClient.class。顺便说一句:这个问题与反射无关。如果这是您的问题,您最好提到发生了 NullPointerException。
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 2013-04-03
相关资源
最近更新 更多