验证JMockit中的私有方法

时间:2015-12-01 12:30:37

标签: unit-testing private jmockit

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

这是可能的,如果是这样的话?

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

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

1 个答案:

答案 0 :(得分: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;
      }
    }
  }
}