我是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?任何建议都将不胜感激。
1条答案
按热度按时间ukdjmx9f1#
verify()
应该在测试用例结束时调用(就像Assert语句一样)。试着打电话verify()
之后create()
.另外,我建议你用mockk代替kotlin。它看起来更加地道和用户友好。