如何在仪器测试期间模拟应用程序使用的库的 class?
How to mock a class of a library used by the app during instrumented test?
我正在开发一个 Android 库,我正在使用 UI Automator 和 Mockk 为其编写一个仪器测试。
该库有一个名为 InstallManager 的 class,它将在设备上安装东西。我希望 InstallManager 抛出异常,以便我可以测试是否会显示错误通知。
我所做的就是找到“更新(安装)”按钮并单击它
val updateButtonComponent = device.findObject(By.text(updateButtonText))
updateButtonComponent.click()
如何mock/manipulate 库在自动化测试期间使用的 InstallManager?
我试过的:
我尝试在 运行 自动化测试之前模拟 InstallManager,希望 UI Automator 神奇地知道它应该使用这个模拟的 InstallManager。但是(正如我已经想到的那样)它不是那样工作的...
private fun breakInstallManager() {
installManager = spyk(InstallManager(mockk(relaxed = true), nonExistentFile))
every { installManager.getString(any()) } returns ""
every { installManager.packageName } returns ""
}
要在 android 测试中模拟 InstallManager class,请调用 MockKAnnotations.init
方法。然后在测试方法中你可以指定return值
@RelaxedMockK
private lateinit var installManager: InstallManager
@Before
fun setUp() {
MockKAnnotations.init(this)
// …
}
@Test
fun installManagerTest(){
every { installManager.getString(any()) } returns ""
every { installManager.packageName } returns ""
// …
}
我正在开发一个 Android 库,我正在使用 UI Automator 和 Mockk 为其编写一个仪器测试。
该库有一个名为 InstallManager 的 class,它将在设备上安装东西。我希望 InstallManager 抛出异常,以便我可以测试是否会显示错误通知。
我所做的就是找到“更新(安装)”按钮并单击它
val updateButtonComponent = device.findObject(By.text(updateButtonText))
updateButtonComponent.click()
如何mock/manipulate 库在自动化测试期间使用的 InstallManager?
我试过的:
我尝试在 运行 自动化测试之前模拟 InstallManager,希望 UI Automator 神奇地知道它应该使用这个模拟的 InstallManager。但是(正如我已经想到的那样)它不是那样工作的...
private fun breakInstallManager() {
installManager = spyk(InstallManager(mockk(relaxed = true), nonExistentFile))
every { installManager.getString(any()) } returns ""
every { installManager.packageName } returns ""
}
要在 android 测试中模拟 InstallManager class,请调用 MockKAnnotations.init
方法。然后在测试方法中你可以指定return值
@RelaxedMockK
private lateinit var installManager: InstallManager
@Before
fun setUp() {
MockKAnnotations.init(this)
// …
}
@Test
fun installManagerTest(){
every { installManager.getString(any()) } returns ""
every { installManager.packageName } returns ""
// …
}