Java 使用jmockit测试私有void方法

Java 使用jmockit测试私有void方法,java,jmockit,Java,Jmockit,我有一个类的私有void方法,我想用Jmockit测试它,有办法吗 private void logRetry(IOException ex) { if (log.isWarnEnabled()) { log.warn("I/O exception (" + ex.getClass().getName() + ") caught when processing request : " + ex.getMessage()); }

我有一个类的私有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");
}

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

在我看来,每个私有方法都必须在同一类的公共方法中的某个地方使用。因此,测试该公共方法它将自动测试该私有方法。

可以通过调用JMockit中的Deencapsulation类来调用私有方法

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());
}

可以通过调用JMockit中的Deencapsulation类来调用私有方法

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());
}