为什么Mockito抱怨​​模拟方法中方法调用的返回类型?

时间:2017-10-29 16:04:04

标签: java mockito

我想嘲笑以下方法:

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);

我该如何模仿该方法?

1 个答案:

答案 0 :(得分:1)

您正试图在final对象上模仿getDtaValueAsString方法(getDtaValueAsLongdta)。

从这些方法中删除final修饰符,然后它们应该是可模拟的。

它如何在下面工作:Mockito使用了很多产生类的魔法来在when(...)调用中生成模拟。不幸的是,这导致最终的方法/最终类很难/不可能模拟。有一些像PowerMock这样的工具可以让你这样做。

但是,如果代码在您的控制之下,请考虑为dta提取接口,然后嘲笑它。这也符合“不与实施接口的程序”范式。