使用 jmockit 测试私有 void 方法

Testing private void method using jmockit

我有一个 class 的私有 void 方法。我想用 Jmockit 测试它,有什么办法吗?

  private void logRetry(IOException ex) {
    if (log.isWarnEnabled()) {
        log.warn("I/O exception (" + ex.getClass().getName() + ") caught when processing request : "
                + ex.getMessage());
    }
    if (log.isDebugEnabled()) {
        log.debug(ex.getMessage(), ex);
    }
    log.info("Re-Trying the request on next available host");
}

在我看来,每个私有方法都必须在同一个 class 中使用 public 方法中的某处。所以测试那个 public 方法它会自动测试那个私有方法。

在JMockit中调用Deencapsulationclass可以调用私有方法

invoke(java.lang.Object objectWithMethod,
 java.lang.String methodName, java.lang.Object... nonNullArgs)

对于你的情况,你可以做类似的事情

@Test
public void testLogRetry() {
    YourClass testCalss = new YourClass();
    Deencapsulation.invoke(testClass, "logRetry", new IOException());
}