微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mockito,如何验证静态成员函数

如何解决mockito,如何验证静态成员函数

一个在内部生成错误消息的类并使用 android,util.Log.i(String,String) 的静态函数记录错误(它可能是其他一些静态函数来记录失败)。

class Util {

    public static void handleIntent(Intent intent,String Tag,String failMsg) {
        ...
            
        if (true) { // for test
            String s = failMsg; //getError(failCode);
            Log.i(Tag,s);
        }
        ...
    }
}

并且测试是为了验证错误消息是否被记录(使用 mockito-inline 3.8.0):

@Test
public void test_log() {

    try (MockedStatic<Log> logMock = Mockito.mockStatic(Log.class)) {

        Intent intent = getIntent();

        // test
        Util.handleIntent(intent,"theTag","+++TEST1");

        // verify
        Mockito.verify(logMock,times(1)).i(eq(theTag),eq("+++TEST1")); //<== does not compile
        Log.i(eq("+++TEST1"),eq(dataStr));

    }
}

如何模拟 android.util.Log 并验证其 static android.util.Log.i(String,String) 已被字符串调用

(powermock 不是选项。它使用的是powermock,在将mockito 更新到3.8.0 和powermock 到2.0.9 后,它开始出现很多错误,并建议将powermock 替换为mockito-inline。 )

解决方法

您可以在测试指令之前添加“logMock.when”指令。

,

这有效:

try (MockedStatic<Log> logMock = Mockito.mockStatic(Log.class)) {

            // test
            Util.handleIntent(intent,"theTag","+++TEST1");
            logMock.verify(() -> Log.i(eq("theTag"),eq("+++TEST1"),times(1));

        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。