java Mocikto如何正确验证模拟调用
我不熟悉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)
测试从mongo获取数据的dao的get方法时,使用when和then return
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? 任何建议都将不胜感激
# 1 楼答案
verify()
应该在测试用例结束时调用(就像断言语句一样)。尝试在create()
之后调用verify()
另外,我建议你用MockK表示Kotlin。它看起来更加地道,用户友好