嵌套模拟与Kotlin Mockito和协程

时间:2018-12-03 11:35:23

标签: testing kotlin mockito coroutine

嗨,我正在尝试模拟KMongo集合,但是我传入了MongoDatabase,存储库获取了它的集合。我找到那个清洁工。

我正在尝试创建一个数据库模拟,它返回一个集合模拟:

    @RunWith(MockitoJUnitRunner::class)
class UserRepositoryTest {
    @Mock
    lateinit var userCollectionMock: MongoCollection<User>
    @Mock
    lateinit var database: MongoDatabase

    @Test
    fun isInsertOneCalledTest() {
        runBlocking {
            whenever(userCollectionMock.insertOne(any<User>(), any<InsertOneOptions>())).thenAnswer { null }
            whenever(database.getCollection(any())).thenAnswer { userCollectionMock }

            val userRepository = UserMongoRepository(database)

            val testUser = User(UUID.randomUUID().toString(), "test@outlook.com")

            userRepository.createUser(testUser)

            verify(userCollectionMock.insertOne(any<User>(), any<InsertOneOptions>()))
        }
    }
}

出现此错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 无效使用参数匹配器! 预期有3个符合条件的记录,有2个记录: -> com.bkaraargirov.users.UserRepositoryTest $ isInsertOneCalledTest $ 1.invokeSuspend(UserRepositoryTest.kt:48) -> com.bkaraargirov.users.UserRepositoryTest $ isInsertOneCalledTest $ 1.invokeSuspend(UserRepositoryTest.kt:50)

我可以读取错误-参数似乎很好。它在第一个everything()时爆炸。 在该模拟中,我返回null,因为返回类型为:Void?

0 个答案:

没有答案
相关问题