我有一个在onCreate()中检查根设备的splash活动。模拟rootChecker不起作用。它看起来像是活动中的loadingModule导致的。我不想在应用程序中加载它,因为它会不必要地将它保存在内存中。如何修复它?
object SplashModule{
var module= module{
single { RootBeer(getAppContext()) }
}
}
class SplashActivity : KoinComponent {
@VisibleForTesting
val rootChecker:RootBeer by lazy { get<RootBeer>() }
override fun onCreate(savedInstanceState: Bundle?) {
...
loadKoinModules(SplashModule.module)
if(rootChecker.isRooted) {
//show error and finish
}
}
}@RunWith(AndroidJUnit4::class)
class SplashActivityTest : KoinTest {
@JvmField
@Rule
val activityTestRule = IntentsTestRule(SplashActivity::class.java, false, false)
@get:Rule
val mockProvider = MockProviderRule.create { clazz ->
Mockito.mock(clazz.java)
}
@Before
fun setup() {
stopKoin()
startKoin { loadKoinModules(arrayListOf(TestModule().applicationModule, module)) }
}
@After
fun after() {
unregisterIdlingResource()
stopKoin()
}
val module= module(override = true){
single { Mockito.mock(RootBeer(getAppContext())::class.java) }
}
@Test
fun testNonRooted() {
declareMock<RootBeer> {
given(isRooted).willReturn(false)
}
val launchedActivity = activityTestRule.launchActivity(Intent())
//test here
}
}发布于 2020-07-28 00:08:42
我认为您需要为koin声明一个模拟提供程序。Koin本身不知道如何在使用declareMock时模拟事物。你必须告诉koin你想如何模拟你的对象,在你的例子中使用的是Mockito的mock函数:
@get:Rule
val mockProvider = MockProviderRule.create { clazz ->
Mockito.mock(clazz.java)
}并且不再需要以下内容:
val module= module(override = true){
single { Mockito.mock(RootBeer(getAppContext())::class.java) }
}https://stackoverflow.com/questions/63070512
复制相似问题