我想嘲笑以下方法:
if (group_name IS null) {
display_name = single_name
} else {
display_name = group_name
}
通过:
final public String getDtaValueAsString(String attrib) {
String v = getDtaValue(attrib);
if(v != null && !v.equals("")){
return v;
}
return null;
}
final public Long getDtaValueAsLong(String attrib) {
String v = getDtaValue(attrib);
if(v != null && !v.equals("")){
return LongUtil.valueOf(v);
}
return null;
}
但是我收到以下错误:
when(dta.getDtaValueAsString(DtaData.NAME)).thenReturn(name);
when(dta.getDtaValueAsLong(DtaData.POSITION)).thenReturn(sortNumber);
我该如何模仿该方法?
答案 0 :(得分:1)
您正试图在final
对象上模仿getDtaValueAsString
方法(getDtaValueAsLong
和dta
)。
从这些方法中删除final
修饰符,然后它们应该是可模拟的。
它如何在下面工作:Mockito使用了很多产生类的魔法来在when(...)
调用中生成模拟。不幸的是,这导致最终的方法/最终类很难/不可能模拟。有一些像PowerMock这样的工具可以让你这样做。
但是,如果代码在您的控制之下,请考虑为dta
提取接口,然后嘲笑它。这也符合“不与实施接口的程序”范式。