问题标签 [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.

0 投票
1 回答
422 浏览

android - 如何在 Android Studio 中查看已编译的 Jar 文件以进行顶级模拟?

如何访问使用 Android Studio 构建的 Android 应用的编译 Jar 文件?

用例-在 Kotlin 中用于 JUnit 5 本地单元测试的MockK,查看编译为 Java 的 Kotlin 输出。

Android Studio 版本- 3.5

@oleksiyp,在这里概述了如何在这个 Medium 系列和这个StackOverflow 帖子中将顶级函数编译成 Java 。

检查 Kotlin 文件是如何编译成 Java 将允许模拟更高级的顶级函数,其中输出不像下面那么简单。

例如,以下示例:

翻译为:

0 投票
1 回答
2746 浏览

android - Android 本地单元测试 - 使用 MockK 模拟 FirebaseAuth

概述

预期行为-在本地单元测试中使用 MockK 的 JUnit5模拟FirebaseApp.class ,使用 MockK 的classrelaxed构造函数模拟功能。

当前行为- 引发以下错误。

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
  • 测试类型:单元测试
0 投票
0 回答
1655 浏览

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实例。)

0 投票
0 回答
132 浏览

android - 可测试代码包含发送广播 - Android 单元测试

需要测试的函数包含触发广播如下,我不想测试广播触发机制,需要测试这个广播触发代码上面的代码,这和应用内内存有关。将数据存储到应用内内存后,需要发送广播以使用应用内内存存储的数据更新某些视图。

在执行单元测试时得到java.lang.RuntimeException: Method setAction in android.content.Intent not mocked

如果使用 android 组件的默认值,

得到io.mockk.MockKException: no answer found for:sendBroadcast(null)

0 投票
1 回答
6410 浏览

unit-testing - 如何通过 io.mockk 测试使用不同参数多次调用的方法?

PS:代码将在 Koltin

例如,我有我的服务类,它做一些事情并注入一些其他服务。

这是我对模拟 OtherService 的 MyService 类的测试:

结果,"bar"参数将是预期的,但将是"foo"参数,并且测试将失败。

原因:someOtherService.someMethod("foo")之前会打电话someOtherService.someMethod("bar")

但是,我想验证每个方法都只调用一次。我怎么能这样做?

0 投票
0 回答
1188 浏览

unit-testing - 如何在调用包含异步操作的方法时等到 io.mockk 捕获的插槽被填充?(单元测试)

PS:Kotlin 中的代码

在我的单元测试中,

我有一个名为 slot 的可变字符串列表

我捕获了这个插槽列表

在某些测试结束时,我检查插槽的大小。

我测试的一个方法包含异步操作。因此,我应该Thread.sleep(1000)在检查插槽大小之前写(slot.size shouldBe 2

如何拒绝Thread.sleep(1000)操作,并做一些会等待1秒的东西。类似的东西verify(timeout = 10000)

0 投票
1 回答
57 浏览

unit-testing - 阻止将单元测试写入已注入 BoxStore 的演示者

所以这是我的项目的概述:模块 A 包含: - 所有 boxstore 数据 - 模块 A 中用于单元测试的 boxstore 模拟

模块 B 包含: - 注入了 BoxStore 的演示者 - PresenterTest 需要模拟 BoxStore

按照此链接模拟 BoxStore,当我在模块 A 中编写单元测试时,它工作正常。在模块 BI 中创建模拟时,得到 NoClassDefFoundError,我理解这是因为模块 B 测试不知道模块 A 测试对象。

所以我做了以下场景:

  1. 在模块 B 的 gradle 中添加:

sourceSets { test.java.srcDirs += [etc...] }

这样模块 B 就会知道模块 A 的模拟对象。

  1. 在模块 B 中复制 BoxStore 的模拟并在测试中使用它,但 BoxStore 在 build 文件夹下生成一个 java 文件,因此我无法创建我的模拟,因为一切都依赖于 MyObjectBox 来生成 BoxStore。

两种方法都失败了:(

关于如何解锁自己的任何想法?

0 投票
1 回答
403 浏览

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
  • 测试类型:单元测试
0 投票
1 回答
716 浏览

gradle - 无法使用 intellij 下载 build.gradle.kts 文件中的依赖项

我正在做一个 Spring Boot Kotlin 项目。这是我的 build.gradle.kts 文件。

我正在添加 mockk 依赖项,但它没有被下载。两个依赖项都没有被下载。构建成功,但我添加的依赖项没有被下载。我已禁用我的代理并尝试过。我已经检查了以下链接并进行了尝试。但它不起作用

Gradle 构建不下载依赖项

任何帮助将不胜感激。

0 投票
0 回答
1176 浏览

unit-testing - 仅限 MockK System.getenv

语言:科特林

目标是测试一个内部调用的方法System.getenv,我想让这个方法产生一个预定义的结果

试过:

这似乎让 JVM 有点昏昏欲睡:

如何测试这样的方法?(可以想象,很多代码使用环境变量)