单元测试之浅析Mockito mock Kotlin Object类方法

本文探讨了Kotlin Object类与Java静态类的相似性和差异,解释了为何不能直接对Object类的‘静态’方法进行mock,并提供了解决方案——使用@JvmStatic注解,以及通过反射实现模拟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kotlin里有一种object类型的类,它在使用上跟Java里的静态类很相似。事实上,它们编译后确实很相似,只不过Kotlin在语法层面上隐藏了一些实现细节,这些细节如果不清楚的话往往会引发一些意料之外的错误。
Mockito是可以直接mock静态方法的,而Mockitomock这种Kotlin类里定义的"静态方法"时却会直接报错,为什么呢?

比如我创建一个Kotlin Object类:ObjectMethod

package com.baichuan.example.unit_test

object ObjectMethod {
   
   

    fun doSomething() {
   
   
        println("this is ObjectMethod#doSomething")
    }

    @JvmStatic
    fun doSomethingWithJvmStatic() {
   
   
        println("this is ObjectMethod#doSomethingWithJvmStatic")
    }
}

如果我直接去mock该类的doSomething方法,会报错。

  @Test
  @DisplayName("mock普通的kotlin静态方法")
  fun testMockKotlinObject() {
   
   
      Assertions.assertThrows(MissingMethodInvocationException::class.java) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值