如何在 JMockit 中部分模拟依赖抽象对象
How to partially mock a dependency abstract object in JMockit
我有抽象 class D
这是测试的依赖 class T
.
测试class:
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
.
那么我怎样才能部分模拟这个依赖抽象class?
在依赖项上使用 @Capturing
注释可以实现这一点。无需添加空的期望块;只有抽象方法会被模拟。
public class T_Test {
@Tested T tested;
@Capturing D dependency;
public void test() {
dependency.doSomething();
tested.testedMethod(dependency);
}
}
我有抽象 class D
这是测试的依赖 class T
.
测试class:
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
.
那么我怎样才能部分模拟这个依赖抽象class?
在依赖项上使用 @Capturing
注释可以实现这一点。无需添加空的期望块;只有抽象方法会被模拟。
public class T_Test {
@Tested T tested;
@Capturing D dependency;
public void test() {
dependency.doSomething();
tested.testedMethod(dependency);
}
}