java - 如何在JMockit中部分模拟依赖项抽象对象

java - 如何在JMockit中部分模拟依赖项抽象对象,第1张

我有抽象类D,它是被测试类T的依赖项。

测试类:

public class T_Test {
    @Tested T tested;

    D dependency;

    public void test() {
        dependency.doSomething();
        tested.testedMethod(dependency);
    }
}

我希望dependency.doSomething()将运行此方法的真实代码,但是抽象方法将被模拟。

  1. 如果按原样运行测试,我显然会NullPointerException使用未初始化的dependency

  2. 如果我将@Mocked注释添加到D dependency行,D中的所有方法都会被模拟,因此d.doSomething()不会执行它所假设的内容去做。

  3. 如果我保留@Mocked注释并在测试方法的开头添加一个空的NonStrictExpectations块,为了进行局部模拟,可以这样:

    new NonStrictExpectations(D.class) {};
    

    或者像这样:

    new NonStrictExpectations(d) {};
    

    我得到java.lang.IllegalArgumentException: Already mocked: class D

  4. 如果我保留NonStrictExpectations阻止并移除@Mocked注释,我会再次NullPointerException使用未初始化的dependency

  5. 那么我该如何部分模拟这个依赖抽象类?

    最佳答案:

    1 个答案:

    答案 0 :(得分:0)

    在依赖项上使用@Capturing注释实现了这一点。无需添加空的期望块;只会抽象抽象方法。

    public class T_Test {
        @Tested T tested;
    
        @Capturing D dependency;
    
        public void test() {
            dependency.doSomething();
            tested.testedMethod(dependency);
        }
    }
    
    本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复