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

时间:2015-06-14 06:50:29

标签: java jmockit

我有抽象类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);
    }
}