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

为什么 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贡献1805条经验 获得超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
  • 1 回答
  • 0 关注
  • 211 浏览

添加回答

举报

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