提问者:小点点

Koin单元测试如何验证类方法在被“by inject()”注入时是否被调用


我有一个类,我为它编写了单元测试。 类通过构造函数注入另外2个类。 然而,由于循环依赖关系问题,我不得不通过inject()注入其他依赖关系之一。

我的类看起来如下:

class AuthUseCase(
    private val accessTokenUseCase: AccessTokenUseCase,
    private val refreshTokenRepo: RefreshTokenRepo
) : KoinComponent {

    val notificationService: NotificationService by inject()



    fun getSyncedAccessToken(loginResult: LoginResult): Token? {
        return when (loginResult) {
            is LoginResult.Success -> {
                accessTokenUseCase.storeRefreshToken(loginResult.accessToken)
                notificationService.init()
                loginResult.accessToken.accessToken
            }
            is LoginResult.Failure -> {
                null
            }
        }
    }
}

我想测试是否在测试中激发了NotificationService.Init。 通常情况下,这很简单

verify(notificationService).init()

然而,我不明白如何嘲弄这门课。 如有任何帮助,我们将不胜感激。


共1个答案

匿名用户

感谢@Mariuz并通过以下帖子:https://github.com/insertkoinio/koin/issues/197#issuecomment-429768448

诀窍是启动一个空的Koin容器。 并在测试中加载模拟模块。

@Test
fun testGetValidAccessTokenIfInvalidAccessTokenIsPassed() {
    notificationService = mock()
    startKoin { }
    loadKoinModules(module {
        single {
            notificationService
        }
    })
   

    verify(notificationService).init()
}