为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Mockito 期望我的验证方法用 `Nothing` 调用?

为什么 Mockito 期望我的验证方法用 `Nothing` 调用?

慕哥9229398 2023-01-05 10:04:48

在我的项目中,我尝试设置一个测试,在该测试中应该验证是否使用特定参数调用了一个方法。为此,我使用 Mockito 和 Kotlin。


在测试中,我使用的是模拟课程。( publisher) 此类是 rosjava 的一部分,包含一个方法publish;


public interface Publisher<T> extends TopicParticipant { //(java)

    void setLatchMode(boolean var1);


    boolean getLatchMode();


    T newMessage();


    void publish(T var1);


    boolean hasSubscribers();


    int getNumberOfSubscribers();


    void shutdown(long var1, TimeUnit var3);


    void shutdown();


    void addListener(PublisherListener<T> var1);

}

当我尝试设定我的期望时:


val publisherMock = mock(Publisher::class.java)


verify(publisherMock, atLeastOnce()).publish(message) // message is underlined with a red color

这不会编译并表示 for 的参数publish应该属于 class Nothing!。为什么是这样?


查看完整描述

1 回答

?
holdtom

TA贡献1551条经验 获得超10个赞

那是因为你的Publisher班级是通用的。mock(Publisher::class.java)使用代码创建模拟创建Publisher<*>对象(这意味着类型参数是Nothing)。

要解决它,您不能只将类型参数放在模拟创建代码中——Publisher<String>::class.java这不是 Java 或 Kotlin 的有效代码。

您所能做的就是不检查演员表:

val publisherMock = mock(Publisher::class.java) as Publisher<String>

如果您需要从之前的行中禁用Android Studio警告@Suppress("UNCHECKED_CAST")


查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信