JMockit中私有方法的验证

Verification of private method in JMockit

我想验证在我的 JMockit 测试中是否调用了私有方法 class。我不想模拟私有方法,只确保它已被调用。

这可能吗?如果可能的话怎么办?

(我发现了一个类似的问题,但是私有方法被嘲笑了,如果可以避免的话,我不想要。) 这是我想要做的事情的一个例子。

public class UnderTest {

  public void methodPublic(){
    .....
    methodPrivate(aStringList);
    .....
  }

  private void methodPrivate(List<String> slist){
    //do stuff
  }
}

public class TestMyClass {

  @Tested
  UnderTest cut;

  @Mocked
  List<String> mockList;

  @Test
  public void testMyPublicMethod() {

    cut.methodPublic();

    new Verifications() {
      {
        // this doesnt work for me...
        invoke(cut, "methodPrivate", mockList);
        times = 1;
      }
    }
  }
}

你需要一个部分模拟(如果你想知道它是否被触发,你无法避免在这个实例中模拟私有方法 - 验证只能在模拟的方法或实例上完成)。我以前没有使用过 JMockit,但我希望代码看起来类似于:

public class TestMyClass {

  @Tested
  UnderTest cut;

  @Mocked
  List<String> mockList;

  @Test
  public void testMyPublicMethod() {

    cut.methodPublic();

    new Expectations(UnderTest.class) {{
       cut.methodPrivate();
    }}

    new Verifications() {
      {
        // this should hopefully now work for you
        invoke(cut, "methodPrivate", mockList); //I assume here that you have statically imported the Deencapsulation class
        times = 1;
      }
    }
  }
}