使用 Kotlin 和 RxJava 测试 MVP 架构的完整示例 - 第 3 部分
2023-09-10 16:51:37
简介
这是 Android 测试系列的最后一部分。如果你错过了前 2 个部分,不用担心,即使你没有阅读过,也可以理解这一点。如果你真的想看看,你可以从 这里 找到它们。
在这部分中,您将学习如何使用假数据在 Espresso 中创建 UI 测试,如何模拟 Mockito-Kotlin 的依赖关系,以及如何将两者结合起来以编写 MVP 架构的完整端到端测试。
使用 Espresso 创建 UI 测试
Espresso 是一个用于 Android UI 测试的开源框架。它使编写可靠且可维护的 UI 测试变得非常容易。
要开始使用 Espresso,您需要在 build.gradle
文件中添加以下依赖项:
testImplementation 'androidx.test.espresso:espresso-core:3.4.0'
接下来,您需要创建一个测试类来编写 UI 测试。此类应扩展 ActivityInstrumentationTestCase2
类并传递要测试的活动类作为构造函数参数。例如:
class MainActivityTest : ActivityInstrumentationTestCase2<MainActivity>(MainActivity::class.java) {
}
现在,您可以编写 UI 测试了。Espresso 提供了许多方法来与 UI 交互和断言其状态。例如,您可以使用以下方法来点击按钮:
onView(withId(R.id.my_button)).perform(click())
您还可以使用以下方法来断言文本视图的文本:
onView(withId(R.id.my_text_view)).check(matches(withText("Hello world!")))
有关 Espresso 的更多详细信息,请参阅官方文档。
使用 Mockito-Kotlin 模拟依赖关系
Mockito-Kotlin 是一个用于 Kotlin 的 Mockito 框架。它允许您模拟对象并验证它们的方法调用。
要开始使用 Mockito-Kotlin,您需要在 build.gradle
文件中添加以下依赖项:
testImplementation 'org.mockito:mockito-kotlin:4.0.0'
接下来,您可以使用 mock()
方法来模拟一个对象:
val mockObject = mock<MyObject>()
您可以使用 whenever()
和 thenReturn()
方法来模拟方法调用:
whenever(mockObject.doSomething()).thenReturn("Hello world!")
您还可以使用 verify()
方法来验证方法调用:
verify(mockObject).doSomething()
有关 Mockito-Kotlin 的更多详细信息,请参阅官方文档。
将 Espresso 和 Mockito-Kotlin 结合使用
现在您已经了解了 Espresso 和 Mockito-Kotlin 的基础知识,让我们将它们结合起来以编写 MVP 架构的完整端到端测试。
首先,您需要创建一个测试用例类来编写测试。此类应扩展 ActivityInstrumentationTestCase2
类并传递要测试的活动类作为构造函数参数。例如:
class MainActivityTest : ActivityInstrumentationTestCase2<MainActivity>(MainActivity::class.java) {
}
接下来,您需要模拟 Presenter 的依赖关系。为此,您可以在测试用例类的 setUp()
方法中使用以下代码:
@Before
fun setUp() {
val mockPresenter = mock<MainPresenter>()
val mainActivity = activity
mainActivity.presenter = mockPresenter
}
现在,您可以使用 Espresso 和 Mockito-Kotlin 来编写 UI 测试。例如,您可以编写以下测试来验证当用户单击按钮时,Presenter 的 doSomething()
方法会被调用:
@Test
fun testClickButton() {
onView(withId(R.id.my_button)).perform(click())
verify(activity.presenter).doSomething()
}
您还可以编写以下测试来验证当 Presenter 的 doSomething()
方法被调用时,文本视图的文本会更新:
@Test
fun testUpdateTextView() {
whenever(activity.presenter.doSomething()).thenReturn("Hello world!")
onView(withId(R.id.my_text_view)).check(matches(withText("Hello world!")))
}
这些只是您可以使用 Espresso 和 Mockito-Kotlin 编写的 UI 测试的几个示例。有关更多详细信息,请参阅官方文档。
结论
在本文中,您学习了如何使用假数据在 Espresso 中创建 UI 测试,如何模拟 Mockito-Kotlin 的依赖关系,以及如何将两者结合起来以编写 MVP 架构的完整端到端测试。
我希望这篇文章对您有所帮助。如果您有任何问题,请随时发表评论。