Mockk 模拟 Kotlin 中的私有属性

2024-03-25

我有一个带有私有字段的简单类。

class EmployeeData {

    private var employeeAge: Int = 0
    
    fun getAge(): Int {
        return 1 + employeeAge
    }
}

我正在尝试测试这个私有的employeeAge以下内容来自官方文档

@Test
fun testPrivateAge() {

    val mock = spyk(EmployeeData())

    every {
        mock getProperty "employeeAge"
    } propertyType Int::class answers { fieldValue + 6 }
    every {
        mock setProperty "employeeAge" value any<Int>()
    } propertyType Int::class answers  { fieldValue += value }


    every { mock getProperty "employeeAge" } returns 33
    every { mock setProperty "employeeAge" value less(5) } just Runs

    assertEquals(10,mock.getAge())
}

我从 MockK 收到这样的异常

io.mockk.MockKException: Missing calls inside every { ... } block.

at io.mockk.impl.recording.states.StubbingState.checkMissingCalls(StubbingState.kt:14)
at io.mockk.impl.recording.states.StubbingState.recordingDone(StubbingState.kt:8)

关于我做错了什么有任何线索吗?官方文档建议对私有属性使用这种技术,但对我来说它不起作用,我正在使用 MockK 的最新版本,它是v1.10.0.

尽管对于私有方法来说它就像一个魅力。我能够按照这个逻辑测试私有方法。


这是一些 Kotlin 优化的问题。根据 MockK 作者的说法,“简要说明。模拟私有属性几乎是不可能的,因为它们没有附加 getter 方法。这是一种 Kotlin 优化,解决方案是重大变化。”

更多信息可以在这 2 个 Github 问题上找到:

  • https://github.com/mockk/mockk/issues/263 https://github.com/mockk/mockk/issues/263
  • https://github.com/mockk/mockk/issues/104 https://github.com/mockk/mockk/issues/104
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockk 模拟 Kotlin 中的私有属性 的相关文章

  • 如何使用 Java 代码在 Android 中显示图像

    我尝试使用 java 代码而不是 xml 在 android 中显示图像 我已经使用 xml 文件完成了它 但我的要求是使用 java代码以获得更多功能 预先感谢您的帮助 如果你想从drawable文件夹加载图像 你可以使用 ImageVi
  • Android - 尝试重新打开已关闭的对象:使用 loaderManager 的 SQLiteQuery

    我对 android 相当陌生 我对过滤后的 listView 和它从横向模式更改为纵向模式的活动有一些问题 反之亦然 我有一个用于过滤 drinkSearch 的 editText 只要我不更改视角 纵向与横向 此过滤就有效 这是我得到的
  • 如何在 Android 中动态添加新的 Android 芯片?

    我有一个名为 Question 的类 其中包含标签的字符串数组 我试图使用 Kotlin 显示 Recyclerview 中的每个问题以及新芯片中的每个标签 这些芯片将包含在一个 ChipGroup 中 我的问题是 如何将数组的每个标签元素
  • Kotlin自定义get执行方法调用

    为了提高对 SharedPreferences Editor 调用的可读性 我想使用一个 Kotlin 变量 每次需要新的 SharedPreferences Editor 时都会执行 getSharedPreferences edit 最
  • Android Beacon Library - 正确使用BluetoothMedic?

    根据以下观察 我对蓝牙医疗的使用有一些疑问 由于蓝牙在我的一台设备上停止 我一直在查看 BluetoothMedic 看看它是否能提供帮助 我查看了调试消息和源代码 根据我是否使用enablePeriodicTests 或单独运行runSc
  • 对 Java Servlet 进行单元测试

    我想知道对 servlet 进行单元测试的最佳方法是什么 只要内部方法不引用 servlet 上下文 测试内部方法就不是问题 但是测试 doGet doPost 方法以及引用上下文或使用会话参数的内部方法呢 有没有办法简单地使用经典工具 例
  • 无法解析 ListView 适配器中的 getSystemService 方法

    我正在研究约翰霍顿的Android 编程初学者 目前正在尝试创建一个笔记应用程序 霍顿刚刚介绍ListViews 但是 我遇到了麻烦adapter class public class NoteAdapter extends BaseAda
  • 如何加密和解密Android SD卡中的文件夹

    是否可以加密 SD 卡文件夹 请帮助我 如果可以的话 加密和解密的处理器是什么 不可能 让我知道我可以为 android SDcard 中的文件夹安全做些什么 我的文件在这里 mnt sdcard image1 jpeg 那么如何在andr
  • 两个具有相同 id 的视图

    安卓如何使用R id id name膨胀 XML 后查找视图 1 假设我有两个 XML 每个按钮都有相同的 id 2 我对它们进行了膨胀并将它们转换为视图 3 R id类中只有一个int将为这两个按钮创建 android 如何区分这些具有相
  • 如何在运行时添加TextView?

    如何在运行时向布局添加新的 TextView 是否可以 完整的解决方案 View parent parent view where to add ViewGroup layout new LinearLayout context layou
  • 如何构建 APK 和应用程序动态加载的单独库

    简短的总结是 如何构建 APK 和单独的库 我指的是某种形式的类集 理想情况下也是资源 例如 JAR AAR 或 DEX 文件 但不将这些库包含在应用程序 相反 应用程序在运行时加载它们 Detail 所以我的主要问题是如何构建这样的应用程
  • RecyclerView:禁用焦点变化引起的滚动

    TL DR我有一个RecyclerView of EditTexts 当用户注意力集中时EditText 1并点击EditText 2 我想EditText 2获得焦点 但我不想要ReyclerView滚动 我怎样才能实现这个目标 我正在尝
  • 随机关闭应用程序 - InputManagerService:收到 RemoteException 发送 setActive(false) 通知

    我有一个非常简单的Android应用程序 类似于手指画应用程序 我是 用手指在屏幕上画一些线条 我的问题是 应用程序随机关闭自己 让我回到 安卓主屏幕 我在 LogCat 上能看到的唯一日志就是这一行 Warning Tag InputMa
  • Android - 将值从 sqlite 数据库加载到数组列表

    我是安卓新手 我有一个使用 SQLite DB 的应用程序 我需要将值从数据库推送到对象类型的数组列表 我使用的代码在这里给出 private ArrayList
  • 如何在Android AsyncTask中显示Toast?

    我正在尝试在我的initial background类中显示Toast 扩展为AsyncTask
  • 如何在 EditText 中用逗号分隔数字

    我有一个 EditText 其 inputType 为number 当用户打字时 我想用逗号分隔数字 这是一个小例子 123 将表示为 123 1234 将表示为 1 234 12345 将表示为 12 345 等等 我尝试使用 TextW
  • 当应用程序打开时,应用程序未显示接收 FCM 的通知

    当我从 Firebase 发送推送时 如果应用程序在后台或已关闭 我会收到通知 但当应用程序打开时不会 调试我发现它在 MyMessagingService 中特别是在 onMessageReceived 处停止 所以我猜我的问题在于生成通
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些
  • 如何像 youtube 一样在纸板中观看普通视频

    我有一个可以正常播放的应用程序VR视频 我的应用程序有两个玩家可以玩这两种类型 在我的VrVideoView有一个按钮可以让视频播放立体声模式 我的问题是 我怎样才能观看正常的视频Cardboard就像YouTube app None

随机推荐