【发布时间】:2018-02-05 20:50:19
【问题描述】:
我扩展了一个方法并尝试测试子方法,但是有一个对被覆盖方法的调用,我不知道如何模拟。
public class Parent()
{
public String foo()
{
//Various checks and validation
if(successful)
{
return null;
}
else
{
return "error";
}
}
}
public class Child()
{
boolean someVariableSetElseWhere;
@Override
public String foo()
{
String error = super.foo();
if(error == null && someVariableSetElseWhere)
{
//do some other checks
error = bar();
}
return error;
}
}
我想检查someVariableSetElseWhere 处于不同状态时是否调用bar(),但我总是从super.foo() 得到"error",所以if 语句总是错误的。有没有办法模拟超类返回null。
我试过了
Child mock = Mockito.mock(Child.class);
Mockito.when((Parent)mock.foo()).thenReturn(null);
在我的测试中,但 Child.foo() 每次都返回 null
【问题讨论】:
-
您的示例应该清楚地表明
Child extends Parent并且可能有助于更正您的类定义的语法。此外,嘲笑一个超级电话是一个坏主意。如果覆盖方法的结果应该依赖于 super,那么以集成方式对其进行测试(否则您测试的是 mock,而不是您的代码)。如果被覆盖方法的结果不应该依赖于 super,那么不要调用 super 并从 super 方法复制代码。在这两种情况下,您都不需要模拟。
标签: java unit-testing mocking mockito