mocikto如何正确验证模拟调用

xhv8bpkk  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(586)

我是kotlin单元测试的新手,尝试使用mockito进行相同的测试

private val mockClient: MongoClient = Mockito.mock(MongoClient::class.java)
private val mockDatabase: MongoDatabase = Mockito.mock(MongoDatabase::class.java)
private val mockCollection: MongoCollection<Document> =
        Mockito.mock(MongoCollection::class.java, RETURNS_DEEP_STUBS) as MongoCollection<Document>

private val dao = MyDao(mockClient)

使用when和thenreturn测试从mongo获取数据的dao的get方法效果良好

val query = BasicDBObject("_id", someId)
Mockito.`when`(mockClient.getDatabase(DB_NAME)).thenReturn(mockDatabase)
Mockito.`when`(mockDatabase.getCollection(COLLECTION_NAME))
    .thenReturn(mockCollection)
Mockito.`when`(mockCollection.find(query)).thenReturn(iterable)
Mockito.`when`(iterable.iterator()).thenReturn(cursor)
Mockito.`when`(cursor.hasNext()).thenReturn(true).thenReturn(false)
Mockito.`when`(cursor.next()).thenReturn(validDocument)
assertEquals(expectedData, dao.get(someId))

在插入过程中验证模拟调用时会出现问题

Mockito.verify(mockCollection, Mockito.times(1)).insertOne(dataDocument)
dao.create(data)

错误是

Wanted but not invoked:
mongoCollection.insertOne({//documents goes here})

我试着直接使用api并将其插入到正确的中,问题在于测试中不确定我是否正确使用了verify?任何建议都将不胜感激。

ukdjmx9f

ukdjmx9f1#

verify() 应该在测试用例结束时调用(就像Assert语句一样)。试着打电话 verify() 之后 create() .
另外,我建议你用mockk代替kotlin。它看起来更加地道和用户友好。

相关问题