[英]Calling a method on Mock object is calling real method instead of mocked implementation
我的代码如下
public process() {
extract();
...
}
private Obj extract() {
Constructor const = new Constructor();
Obj object = const.getOBJMethod("12345","c:/file/a.zip",null);
return object;
}
我正在使用mockito测试方法过程。 在我的测试类中,我编写了代码
Constructor mocckConst = mock(Constructor.class);
Obj mockObject = mock(Obj.class);
when(mocckConst .getOBJMethod("12345","c:/file/a.zip",null).thenReturn(mockObject);
但是当调用extract方法执行testcase时,它将转向getOBJMethod()的实际实现。
构造函数类有另一个内部类。 这会导致任何问题吗? 任何人都可以告诉我这里出了什么问题和解决方案。
我想即兴创作我的流程方法。
public process(String base) {
if("abc".equals(base)) {
---
}
else if("def".equals(base) {
extract();
---
}
}
这样,只有在def为def时才会调用extract()。 我不想将构造函数对象传递给process()方法然后有任何解决方案吗?
在要测试的类中,创建一个新的Constructor对象(通过Constructor const = new Constructor()
),因此,您始终使用REAL实现。 如果要将模拟对象替换为测试对象,则必须注入Constructor
对象。 注入也可以通过构造函数进行测试。
private final Constructor const; // remove final, if required
public <ConstructorOfYourClassHere>(Constructor const) {
assert const != null : "const != null"; // use assertions, if you like
this.const = const;
// other constructor code...
}
// your other code here...
public process(String base) {
if("abc".equals(base)) {
// ---
}
else if("def".equals(base) {
extract();
// ---
}
}
private Obj extract() {
Obj object = const.getOBJMethod("12345","c:/file/a.zip",null);
return object;
}
然后,您可以在创建测试对象时调用模拟并调用process()
。 然后将使用您的模拟实现。
BTW :
extract
方法的可见性更改为protected
以便您也可以测试该方法。 看到这里 。 如果要使用模拟测试它,可以监视Constructor对象。
public class Test{
@spy
Constructor const;
public process() {
extract();
...
}
private Obj extract() {
Obj object = const.getOBJMethod("12345","c:/file/a.zip",null);
return object;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.