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

在我的项目中,我尝试设置一个测试,在该测试中应该验证是否使用特定参数调用了一个方法。为此,我使用 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!。为什么是这样?


慕哥9229398
浏览 343回答 1
1回答

holdtom

那是因为你的Publisher班级是通用的。mock(Publisher::class.java)使用代码创建模拟创建Publisher<*>对象(这意味着类型参数是Nothing)。要解决它,您不能只将类型参数放在模拟创建代码中——Publisher<String>::class.java这不是 Java 或 Kotlin 的有效代码。您所能做的就是不检查演员表:val&nbsp;publisherMock&nbsp;=&nbsp;mock(Publisher::class.java)&nbsp;as&nbsp;Publisher<String>如果您需要从之前的行中禁用Android Studio警告@Suppress("UNCHECKED_CAST")。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java