问题标签 [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 投票
2 回答
5770 浏览

unit-testing - MockK - 在顶级 val 上调用模拟/间谍顶级扩展方法

在下面的 MWE 中,我试图验证调用是否baz()也会调用另一个对象的方法。但是,我似乎无法模拟/监视该对象。

MWE:

这失败了,因为调用theVal.bar()获取val初始化值而不是模拟值spy

如何在不更改顶级属性定义的情况下强制使用间谍?换句话说:我需要一个顶级的“常量”,但我也想模拟它。我可以使用val theVal get() = Foo(),它解决了这个问题,但它显着改变了代码,因为它Foo每次都会替换实例。

使用的版本: - Kotlin 1.3.10 - MockK 1.8.13.kotlin13 - JUnit 5.3.1

错误:

0 投票
1 回答
1623 浏览

android - 如何根据模拟中传递的参数从同一函数返回两个不同的模拟?

我正在测试一种方法。它两次请求模拟对象的相同功能,但传递的参数不同。自然,我需要两个不同的答案,但 mockk 给了我相同的答案。

如何使用 mockk 获得两个不同的结果?

0 投票
0 回答
433 浏览

unit-testing - Mockk 方法调用验证:我可以验证是否调用了两种可能的方法之一?

我想检查是否调用了HandlerThread'squitquitSafely方法(仅调用了一次,并且仅调用了这两个中的一个)。可以使用Mockk吗?

0 投票
3 回答
10560 浏览

kotlin - 如何使用 mockk 调用 lambda 回调

我用 mockk 创建了一个模拟类。在这个模拟中,我现在调用一个将 lambda 作为参数的方法。

此 lambda 用作回调,以将回调的状态更改传递给方法的调用者。

如何配置模拟以调用传递的 lambda?

0 投票
1 回答
219 浏览

java - 如何对并发 rxjava 执行进行单元测试

我有两个Completable同时在两个不同的线程上运行并访问共享资源。我想测试他们的行为,以便只有第一个运行某些代码,第二个以错误结束。

由于我Scheduler.trampoline()在测试中使用,这两个Completables 不能同时运行,而是按顺序运行,我无法对该代码进行单元测试。

例子,

0 投票
2 回答
391 浏览

android - 匕首不注入活动

我目前正在阅读这篇文章,尝试使用 Kotlin 在 android 中模拟 dagger 依赖项,但遇到了一些麻烦。

我收到一条错误消息,提示 activityInjector 未初始化。

我究竟做错了什么?

测试应用组件

测试应用

测试喷油器

活动模块

仪表化单元测试

0 投票
1 回答
1213 浏览

unit-testing - Cast exception when mocking kotlin lambda callbacks in Mockk

I am having some trouble mocking callback functions with Mockk.

I am trying to mock a task success listener that is called like this:

Where the java signature for the callback would look like this:

and the signature for addOnSuccessListener looks like this

My mock looks like this:

I have also tried:

Either way, I am receiving a cast exception like:

0 投票
1 回答
1508 浏览

kotlin - 如何模拟调用 kotlin.system.exitProcess

我想测试一些使用 3rd 方代码调用的代码,kotlin.system.exitProcess()在标准库中定义如下:

exitProcess()被调用时,JVM 停止并且无法进行进一步的测试。我没有设法exitProcess()用 mockk 模拟调用。可能吗?

一些进一步的信息:

第 3 方库是 Clikt ( https://ajalt.github.io/clikt/ ),这是一个用于构建命令行界面的好库。Clikt 应用程序解析命令行,如果失败则退出。这可能是调用 System.exit 可以的罕见原因之一。当然还有更多可测试的解决方案,但无论如何,在使用 3rd 方库时,争论在库中可以更好地完成事情已经过时了。

我真正想要测试的是,我的应用程序在使用--help或错误参数调用时会写入预期的使用消息。

我还尝试以System.exit()这种方式模拟调用: mockkStatic("java.lang.System") every { System.exit(any()) }.throws(RuntimeException("blubb")) 导致另一个问题,也都是然后模拟对 System 的调用:

有趣的是,我设法用 jmockit 在 Java 中对此进行了测试,如下所示:

0 投票
1 回答
6563 浏览

kotlin - 我们可以模拟构造函数并检查它的参数吗?

使用mockk来模拟构造函数,我们可以执行以下操作(取自文档):

我想检查我的构造函数的参数。就像是:

我现在没有找到任何方法来检查构造函数参数。

0 投票
1 回答
7355 浏览

kotlin - mockk 验证 lambda 参数

我想验证通过 lamdba 传入的值。函数如下所示:

现在在我的测试中,我想验证为 idSupplier 传入的值。我做了一个模拟来返回 save(...) 的值,它在我自己的 save(..., () -> ...) 中调用,就像这样

现在验证我现在有这个

哪个有效,但我想知道已通过的确切值,即如果实体的 id 是 123,我想验证这一点。

先感谢您