我有抽象类D
,它是被测试类T
的依赖项。
测试类:
public class T_Test {
@Tested T tested;
D dependency;
public void test() {
dependency.doSomething();
tested.testedMethod(dependency);
}
}
我希望dependency.doSomething()
将运行此方法的真实代码,但是抽象方法将被模拟。
如果按原样运行测试,我显然会NullPointerException
使用未初始化的dependency
。
如果我将@Mocked
注释添加到D dependency
行,D
中的所有方法都会被模拟,因此d.doSomething()
不会执行它所假设的内容去做。
如果我保留@Mocked
注释并在测试方法的开头添加一个空的NonStrictExpectations
块,为了进行局部模拟,可以这样:
new NonStrictExpectations(D.class) {};
或者像这样:
new NonStrictExpectations(d) {};
我得到java.lang.IllegalArgumentException: Already mocked: class D
。
如果我保留NonStrictExpectations
阻止并移除@Mocked
注释,我会再次NullPointerException
使用未初始化的dependency
。
那么我该如何部分模拟这个依赖抽象类?
答案 0 :(得分:0)
在依赖项上使用@Capturing
注释实现了这一点。无需添加空的期望块;只会抽象抽象方法。
public class T_Test {
@Tested T tested;
@Capturing D dependency;
public void test() {
dependency.doSomething();
tested.testedMethod(dependency);
}
}