[英]declareMock<> not working with mockk in android unit test
i am trying to mock a repository class using declareMock
and mockk
but it doesn't seem to be working as i am getting the data from the real repository.我正在尝试使用
declareMock
和mockk
但它似乎不起作用,因为我从真实存储库获取数据。
Version版本
implementation "org.koin:koin-androidx-viewmodel:2.1.6"
testImplementation "org.koin:koin-test:2.1.6"
Code代码
My application class (only relevant parts):我的申请 class (仅相关部分):
class MyApplication : Application() {
companion object {
val appModule = module {
single<RepositoryUserLists> { RepositoryUserListsImpl() }
}
}
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@MyApplication)
modules(appModule)
}
}
}
My test class (only relevant parts)我的测试 class (仅相关部分)
class TestRepositoryUserLists : KoinTest {
@get:Rule
val koinTestRule = KoinTestRule.create {
modules(MyApplication.appModule)
}
@get:Rule
val mockProvider = MockProviderRule.create { clazz ->
mockkClass(clazz.java.kotlin)
}
@Rule
@JvmField
val instantExecutorRule = InstantTaskExecutorRule()
private val repo: RepositoryUserLists by inject()
@Before
fun before() {
declareMock<RepositoryUserLists> {
every { getAllLists() } returns MutableLiveData(listOf(MyList("test list")))
}
//PROBLEM IS HERE
//Expected: a list containing one item names "test list".
//Actual: empty list (like in real repository).
repo.getAllLists().value
}
}
github issue: https://github.com/InsertKoinIO/koin/issues/841 github 问题: https://github.com/InsertKoinIO/koin/issues/841
I think you need to use the given/will
syntax inside the declareMock
block我认为您需要在
declareMock
块中使用given/will
语法
declareMock<RepositoryUserLists> {
given(getAllLists()).willReturn(MutableLiveData(listOf(MyList("test list"))))
}
Just posted it here for those migrating to a newer version of the koin like 2.2.2, and the dependency test was failed with an error Missing MockProvider. Please use MockProvider.register() to register a new mock provider
刚刚为那些迁移到 2.2.2 等新版本的 koin 的人发布了它,并且依赖项测试失败并出现错误
Missing MockProvider. Please use MockProvider.register() to register a new mock provider
Missing MockProvider. Please use MockProvider.register() to register a new mock provider
. Missing MockProvider. Please use MockProvider.register() to register a new mock provider
。
import io.mockk.every
import io.mockk.mockkClass
...
val app = koinApplication {
printLogger(Level.DEBUG)
modules(...)
}
MockProvider.register { mockkClass(it) }
with(app.koin) {
declareMock<MyService> {
every { someAction() } returns "some answer"
...
}
}
app.checkModules()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.