问题标签 [mockk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 如何在 Android Studio 中查看已编译的 Jar 文件以进行顶级模拟?
如何访问使用 Android Studio 构建的 Android 应用的编译 Jar 文件?
用例-在 Kotlin 中用于 JUnit 5 本地单元测试的MockK,查看编译为 Java 的 Kotlin 输出。
Android Studio 版本- 3.5
@oleksiyp,在这里概述了如何在这个 Medium 系列和这个StackOverflow 帖子中将顶级函数编译成 Java 。
检查 Kotlin 文件是如何编译成 Java 将允许模拟更高级的顶级函数,其中输出不像下面那么简单。
例如,以下示例:
翻译为:
android - Android 本地单元测试 - 使用 MockK 模拟 FirebaseAuth
概述
预期行为-在本地单元测试中使用 MockK 的 JUnit5模拟FirebaseApp.class ,使用 MockK 的class、relaxed或构造函数模拟功能。
当前行为- 引发以下错误。
java.lang.NoClassDefFoundError:无法初始化类 com.google.firebase.FirebaseApp
执行
要模拟的类/函数 - FirebaseAuth.class
测试 - SomeTest.kt
Android 代码 - HomeViewModel.kt
注意- 已成功实施相同的方法,以便使用以下模拟模拟FirebaseRemoteConfig.class 。
SomeTest.kt
常量.kt
完整的错误日志
图书馆
- MockK 版本:1.9.3
- 操作系统:Mac 10.14.6
- Kotlin 版本:1.3.50
- JDK版本:12.0.1
- JUnit 版本:5.5.1
- 测试类型:单元测试
kotlin - MockK 无法匹配构造函数签名
我正在实现一种从 Elasticsearch 中的索引中删除别名的方法。为了验证该方法是否使用所需参数执行对 Elasticsearch 的请求,我正在使用 mockK 库编写单元测试。但是,org.apache.http.nio.entity.NStringEntity
即使只有一个这样的构造函数(public NStringEntity(final String s, final ContentType contentType)
),单元测试中类构造函数签名的签名也不匹配。任何想法如何解决这一问题?
这是方法:
这是单元测试:
我在线收到以下错误every { NStringEntity(any(), ContentType.APPLICATION_JSON) } returns nStringEntity
:
(esClientConf[context.cluster]
返回一个 ElasticsearchRestClient
实例。)
android - 可测试代码包含发送广播 - Android 单元测试
需要测试的函数包含触发广播如下,我不想测试广播触发机制,需要测试这个广播触发代码上面的代码,这和应用内内存有关。将数据存储到应用内内存后,需要发送广播以使用应用内内存存储的数据更新某些视图。
在执行单元测试时得到java.lang.RuntimeException: Method setAction in android.content.Intent not mocked。
如果使用 android 组件的默认值,
得到io.mockk.MockKException: no answer found for:sendBroadcast(null)。
unit-testing - 如何通过 io.mockk 测试使用不同参数多次调用的方法?
PS:代码将在 Koltin
例如,我有我的服务类,它做一些事情并注入一些其他服务。
这是我对模拟 OtherService 的 MyService 类的测试:
结果,"bar"
参数将是预期的,但将是"foo"
参数,并且测试将失败。
原因:someOtherService.someMethod("foo")
之前会打电话someOtherService.someMethod("bar")
。
但是,我想验证每个方法都只调用一次。我怎么能这样做?
unit-testing - 如何在调用包含异步操作的方法时等到 io.mockk 捕获的插槽被填充?(单元测试)
PS:Kotlin 中的代码
在我的单元测试中,
我有一个名为 slot 的可变字符串列表
我捕获了这个插槽列表
在某些测试结束时,我检查插槽的大小。
我测试的一个方法包含异步操作。因此,我应该Thread.sleep(1000)
在检查插槽大小之前写(slot.size shouldBe 2
)
如何拒绝Thread.sleep(1000)
操作,并做一些会等待1秒的东西。类似的东西verify(timeout = 10000)
。
unit-testing - 阻止将单元测试写入已注入 BoxStore 的演示者
所以这是我的项目的概述:模块 A 包含: - 所有 boxstore 数据 - 模块 A 中用于单元测试的 boxstore 模拟
模块 B 包含: - 注入了 BoxStore 的演示者 - PresenterTest 需要模拟 BoxStore
按照此链接模拟 BoxStore,当我在模块 A 中编写单元测试时,它工作正常。在模块 BI 中创建模拟时,得到 NoClassDefFoundError,我理解这是因为模块 B 测试不知道模块 A 测试对象。
所以我做了以下场景:
- 在模块 B 的 gradle 中添加:
sourceSets { test.java.srcDirs += [etc...] }
这样模块 B 就会知道模块 A 的模拟对象。
- 在模块 B 中复制 BoxStore 的模拟并在测试中使用它,但 BoxStore 在 build 文件夹下生成一个 java 文件,因此我无法创建我的模拟,因为一切都依赖于 MyObjectBox 来生成 BoxStore。
两种方法都失败了:(
关于如何解锁自己的任何想法?
android - JUnit 5 注释 - 不使用 LiveData / 参数化测试
概述
预期行为
使用JUnit 5 的注释语法初始化mockObject
函数实现替换模拟对象初始化,如文档和@oleksiyp的Medium 帖子中所述。
当前行为
有问题的测试是@phauer为 JUnit 5概述的参数化测试,似乎与. 为了使用 LiveData 实现测试,测试必须使用@JeroenMols设计的在本地单元测试中同步运行。@ExtendWith(MockKExtension::class)
InstantExecutorExtension
模拟对象初始化与mockObject
函数按预期工作,但使用注释失败@MockK
。
错误
警告消息/构建失败:
尚不支持具有非 SOURCE 保留的可重复注释。
执行
mockObject
功能实现(按预期工作)
注释语法初始化(由于两个扩展而不起作用@ExtendWith
)
环境
- MockK 版本:1.9.3
- 操作系统:Mac 10.14.6
- Kotlin 版本:1.3.50
- JDK版本:12.0.1
- JUnit 版本:5.5.1
- 测试类型:单元测试
gradle - 无法使用 intellij 下载 build.gradle.kts 文件中的依赖项
我正在做一个 Spring Boot Kotlin 项目。这是我的 build.gradle.kts 文件。
我正在添加 mockk 依赖项,但它没有被下载。两个依赖项都没有被下载。构建成功,但我添加的依赖项没有被下载。我已禁用我的代理并尝试过。我已经检查了以下链接并进行了尝试。但它不起作用
任何帮助将不胜感激。
unit-testing - 仅限 MockK System.getenv
语言:科特林
目标是测试一个内部调用的方法System.getenv
,我想让这个方法产生一个预定义的结果
试过:
这似乎让 JVM 有点昏昏欲睡:
如何测试这样的方法?(可以想象,很多代码使用环境变量)