在 Android 中使用 Mockito 进行单元测试

言鼎科技 2023-06-08 383

如今移动应用程序的功能越来越复杂,规模越来越大,这就是为什么编写测试用例对于改进代码并确保每个模块正常工作非常重要(我知道它在移动开发人员社区中经常被低估,有时甚至完全被忽视!)。要编写可高效进行单元测试的代码,我们应该使用最合适的架构,如 MVP 或 MVVM,它们将松散耦合到 Android 活动/片段/适配器中。

开发人员应考虑在其测试套件中添加三种不同的测试:
1. UI 测试:这些测试用于断言应用程序 UI。使用浓缩咖啡。

2. Instrumented Tests:当我们想要验证按钮点击等用户操作时,这些测试在 Android 设备上运行,无论是物理设备还是模拟设备,都利用 Android 框架提供的 API。AndroidX Test & Espresso 也广泛用于此目的。

3.单元测试:单元测试对于测试应用程序中的每个功能和过程更为重要。对于单元测试,最常用的工具是 JUnit、Mockito 或 Hamcrest。

单元测试的主要目标是通过验证代码的正确性在开发周期的早期修复错误。在本教程中,我们将了解什么是 Mockito 以及在 Android 应用程序中使用 Mockito 实现单元测试的步骤。

为什么选择 Mockito?

通常我们有依赖于不同类的另一个方法的依赖和方法的类。当我们对这些方法进行单元测试时,我们希望单元测试独立于所有其他依赖项。这就是为什么我们将使用 Mockito 模拟依赖类并测试主类。我们无法使用 JUnit 实现这一点。

测试结果成为我们在 Bacancy 告诉我们后代开发人员的故事。
从屡获殊荣的应用程序开发公司聘请 Android 开发人员在市场上脱颖而出,成为具有您的商业理念的明星解决方案。

现在转向我们的演示应用程序。

步骤:在 Android 中使用 Mockito 进行单元测试

让我们以加法、减法等计算的简单示例来理解 Mockito 框架。

我们将创建一个文件ComputationActivity.kt来预先显示所有计算。为了管理所有操作,我们将创建对象类 Operations.kt,它将作为主构造函数中的参数传递给ComputationActivity类。

在 Android 中使用 Mockito 进行单元测试
类 ComputationActivity(私有 val 运算符:操作){
  有趣的 getAddition(x: Int, y: Int): Int = operators.add(x, y)
  fun getSubtraction(x: Int, y: Int): Int = operators.subtract(x, y)
  有趣的 getMultiplication(x: Int, y: Int): Int = operators.multiply(x, y)
  有趣的 getDivision(x: Int, y: Int): Int = operators.divide(x, y)}

Operations.kt 类看起来像这样,它将处理计算函数。

在 Android 中使用 Mockito 进行单元测试
对象操作{
  有趣的添加(x:Int,y:Int):Int = x + y
  有趣的减法(x:Int,y:Int):Int = x - y
  有趣的乘法(x:Int,y:Int):Int = x * y
  fun divide(x: Int, y: Int): Int = x / y}

在 build.gradle 文件中添加集成 Mockito 所需的依赖。

我们将使用适用于本地测试源而非应用程序的testImplementation 。

在 Android 中使用 Mockito 进行单元测试
testImplementation 'junit:junit:4.13.2'testImplementation 'org.mockito:mockito-core:2.25.0'testImplementation 'org.mockito:mockito-inline:2.13.0'

添加用于测试ComputationActivity.kt类的ComputationTest.kt 文件的文件夹结构。

默认情况下,module-name/src/test将包含用于本地单元测试的源文件。

在 Android 中使用 Mockito 进行单元测试

现在,我们将在 ComputationTest.kt 文件中添加测试函数

  • @RunWith – 我们已经用 MockitoJUnitRunner::class 进行了注释,这意味着它提供了运行测试的 Runner。

  • @Mock – 使用@Mock 注释我们可以模拟任何类。模拟任何类只不过是创建特定类的模拟对象。

在这里,我们将在测试文件中模拟Operations.kt类,因为ComputationActivity.kt文件依赖于它。

在 Android 中使用 Mockito 进行单元测试
@RunWith(MockitoJUnitRunner::类)类计算测试{
  @嘲笑
  lateinit var 运算符:操作
  lateinit var computationActivity:ComputationActivity}
  • @Before – 带有@Before 注释的方法在每次测试之前运行。如果您想运行通用代码,此注释非常有用。在这里,我们在 @Before 注释的帮助下运行测试之前在我们的测试文件中初始化 ComputationActivity 类。

在 Android 中使用 Mockito 进行单元测试
@前有趣的设置(){
  computationActivity = ComputationActivity(运算符)}
  • @Test – 要执行测试,我们需要用@Test 注释函数。

在 Android 中使用 Mockito 进行单元测试
@测试有趣的 givenValidInput_getAddition_shouldCallAddOperator() {
  值 x = 5
  值 y = 10
  计算活动.getAddition(x, y)
  验证(运算符).add(x, y)

验证方法将检查模拟对象的特定方法是否已被调用。

@After – @After 注释用于在每个测试用例完成后运行。

@BeforeClass – @BeforeClass 当你想运行一个太昂贵而无法运行多次的公共操作时使用。因此,使用此注释,您可以在运行所有其他测试之前执行此类操作。

@AfterClass – 用于在所有测试成功执行后释放任何引用。

内联模拟标记:Mockito 无法直接测试最终类或静态类。正如我们所知,Kotlin 类默认是最终的。所以要为这些类运行测试,我们需要添加标记内联依赖。

Mockito 2.25.0 为使用 mockito-inline 的开发人员发布了一项重要功能。具体来说,任何使用 Kotlin 的人都需要使用 mockito-inline。转到我们在 Android 教程中使用 Mockito 进行单元测试的最后一部分并运行测试。

运行测试

要执行所有测试,请右键单击 ComputationTest.kt 文件并选择“运行”选项

您甚至可以通过右键单击该函数并从那里选择“运行”选项来仅运行一个测试函数。

在 Android 中使用 Mockito 进行单元测试

Github 来源:Android 中的单元测试

请随意访问源代码:mockito-android-testing并尝试使用代码!

结论

  • Mockito 用于测试 Kotlin 中的最终课程。

  • Mockito 是移动开发人员编写单元测试的广泛使用的框架。

所以,这是关于在 Android 应用程序中使用 Mockito 进行单元测试的。我们为您准备了更多与移动开发相关的教程!如果您正在寻找 Android 或 iOS 教程作为起点,那么移动开发教程页面适合您!访问教程并开始学习更多!如果您有任何问题或建议,可以给我们回信!我们很乐意帮助!

言鼎科技主做软件开发,微信小程序,网站开发,软件外包,手机APP开发。如有需要记得联系我们!

The End