在我的项目中,我尝试设置一个测试,在该测试中应该验证是否使用特定参数调用了一个方法。为此,我使用 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")
。
添加回答
举报
0/150
提交
取消