我尝试在Kotlin中模拟MongoCollection类
class MyTest {
val mockCollection: MongoCollection<Document> = mock(MongoCollection<Document>::class.java)
}
它给出了错误只允许类位于类文字的左侧
在研究了一点之后,我发现了这个only classes are allowed on the left hand side of a class literal,我尝试为MongoCollection创建一个类型,然后将其传递给mock,但由于mock的类型为Type,因此会出现错误。
我还尝试将mock转换为Document,如下所示
val mockCollection: MongoCollection<Document> = mock(MongoCollection::class.java) as MongoCollection<Document>
但在代码实现内部访问MongoCollection时会出现NullpointerException异常。
我已经试过了
- MockitoKotlin库-https:mvnrepository.com/artifact/com.nhaarman.mockitokotlin2/mockito-kotlin/2.2.0
- Java模拟内核-https://mvnrepository.com/artifact/org.mockito/mockito-core/3.5.13
两个都有同样的错误
我厌倦了用java写同样的测试,也厌倦了在其中转换泛型。
MongoCollection<Document> mockCollection = (MongoCollection<Document>) mock(MongoCollection.class);
有没有人有在Kotlin中嘲笑泛型类的经验?
2条答案
按热度按时间zour9fqk1#
我为你写了下面的例子:
则以下所有三个代码片段都可用于测试,并且测试通过:
第一个
如果你得到
NPE
,问题出在别的地方,也许提供更多的代码可以帮助!4bbkushb2#
溶液
在Mockito上创建一个扩展,如下所示:
用法
使用扩展函数,如下所示:
我总是使用这个函数而不是原来的
mock()
函数,因为可以推断出java类。离题
它甚至是伟大的嘲笑Lambdas!