【问题标题】:Mocikto how to correctly verify mock callsMockito 如何正确验证模拟调用
【发布时间】:2021-01-05 13:57:20
【问题描述】:

我是 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)

使用 whenthenReturn

测试从 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 并正确插入数据,问题在于测试不确定我是否正确使用验证? 任何有帮助的建议表示赞赏。

【问题讨论】:

  • 如何创建dataDocument?也使用mockito-kotlin 库。它有whenever 而不是whenMockito.mock(MongoClient::class.java) 可以替换为reifiedmock&lt;MongoClient&gt;()
  • dataDocument 是一个实际的Mongo Document val dataDocument = Document() // 填写其他细节
  • 我很长时间没有使用 mongo,但我的怀疑在于 Document 类,它没有 equals/hashcode 方法,因此您的测试 Document 和实际服务 @987654334 @differ,这就是为什么 mockito 无法匹配,因为即使它们具有相同的值,它们也不相等。
  • dao.create(data) 是做什么的?顺序正确吗? verify 应该在测试用例结束时调用。如果dao. create(data) 预计会执行insert 操作,则更改方法调用的顺序。

标签: java unit-testing kotlin mocking mockito


【解决方案1】:

verify() 应该在测试用例结束时调用(就像断言语句一样)。尝试在create() 之后调用verify()

另外,我建议您将 MockK 用于 Kotlin。它看起来更加地道且用户友好。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多