问题标签 [kotest]

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 回答
103 浏览

kotlin - 如何使用 kotlin kotest 定位 js?

我一直在尝试在 kotlin 多平台项目中设置 kotest。在 kotest 入门指南中,它说要将此依赖项添加到commonTest

不幸的是,这并没有解决

如果仅添加此依赖项即可jvmTest解决。我找不到任何为多平台设置 kotest 的指南。

0 投票
1 回答
374 浏览

java - How do I "obtain transaction-synchronized Session for current thread" in a Micronaut / Kotest / Hibernate test

I'm trying to clean up a database used by my component tests after each one so it's blank for the next. To do this I've got something like the following:

However when I run this I get the following error:

I've seen in other posts mentions of using @Transaction to decorate the method or getting an entity manager from the session factory but when using these the error is the same.

There's no issue with running this code in the init { ... } clause of my tests (i.e. where the test code is) and it works exactly as expected. But if I run it in afterEach it has an issue.

Can anyone offer some advice on how to resolve this?

Thanks!

0 投票
1 回答
241 浏览

ktor - 使用多个模块在 ktor 中进行测试

我正在玩弄一个小的 ktor webapp,我想在多个模块中拆分功能。我有一个根模块,我在其中安装了我想在整个应用程序中使用的功能

和我正在实现域功能的域模块

现在我想对此功能进行测试

如果我这样运行它,我会收到错误消息Response pipeline couldn't transform 'class org.codeshards.buecherkiste.book.domain.Book' to the OutgoingContent- 所以内容协商不起作用。这是有道理的,因为它安装在此处未调用的根模块中。我通过将根模块和域模块包装在沿我的测试用例实现的测试模块中解决了这个问题:

现在这似乎奏效了。

因为当我关心 ktor 和 kotest 时我是个菜鸟,所以我想征求对此解决方案的反馈。这是做我想做的事的正确方法,还是我让自己陷入困境?有更好的解决方案吗?

0 投票
1 回答
261 浏览

kotlin - Handle multiple exceptions in Kotlin Kotest eventually

As per kotest docs: https://github.com/kotest/kotest/blob/master/doc/nondeterministic.md

You can tell eventually to ignore specific exceptions and any others will immediately fail the test.

I want to pass multiple exceptions to eventually that I know would be thrown by my block so that I can explicitly skip them.

Right now I only see a way to pass one, how do I pass more than one exception to eventually to skip it in case the block throws those exceptions?

0 投票
1 回答
102 浏览

kotlin - 如何在 BehaviorSpec 中创建可重用的步骤

我对 Kotlin 和 Kotest 还是新手,我正在努力寻找一种方法来创建 BDD 测试风格。我的问题是框架如何能够创建可重用的给定步骤。例如:

所以在这里我有给定步骤“状态A”的代码重复。我想知道创建整个步骤的预期方式是什么。看起来 given(description: String) 是我必须重复的内容,因为println("Verify the State A exists")我只是将其提取到常用函数中。

我希望我可以更好地构建我的代码,以便我可以创建给定的步骤并在多个测试场景中使用它们。对此有何建议?

0 投票
1 回答
675 浏览

kotlin - Junit 5 - 有没有办法使用例如 assertEquals(a,b) 比较两个对象并决定只显示结果中不同的值

比较两个不同的对象(例如两个 Dto)是否有最佳实践,如果它们不同以不显示较长的结果,如果对象在某种程度上复杂和嵌套,则很难找到不同的属性?

目前,我看到一个很长的结果,很难或很麻烦地找到哪个特定的属性失败了。至少它使用了一个使用 Kotlin 的数据类。

在此处输入图像描述

在此处输入图像描述

在 IDE(例如 IntelliJ)中,如果对象更大或更复杂,您必须滚动才能查看完整的比较。找出不同之处并不直观或容易。

我要避免的是,例如对每个属性使用断言,并且只检查彼此的属性。

在我看来,这会导致维护开销。

例如,我可以使用 Kotest 看到这个不错的输出。为什么 Junit5 assertEquals 方法不可能做到这一点?

0 投票
0 回答
108 浏览

kotlin - MicronautTest 注释使用 DescribeSpec 跳过测试

我正在尝试使用 @MicronautTest 注释编写测试,以利用 @Requires 注释,以便我可以根据我设置的 MICRONAUT_ENVIRONMENTS 变量运行不同的测试。我正在关注我在这里看到的内容:https ://micronaut-projects.github.io/micronaut-test/latest/guide/#kotest

但是我的测试只是被跳过了。这是测试:

使用以下命令运行(位于名为smokeTest 的源集中):

这是我看到的日志行:

这是我的测试依赖项:

顺便说一句,我确实有这套:

0 投票
0 回答
216 浏览

unit-testing - 是否可以使用 mockk 监视我无法控制其创建的对象?

我有一个 Kotlin 项目,使用kotest作为我的单元测试框架和mockk来处理我的模拟需求。我对 Kotlin 语言的各个方面都很陌生,并且选择了测试库/框架。

我有一个简单的类,其中一个函数创建一个我想监视的对象。

我想监视 URI 对象的创建,以确保它通过了正确的端点。根据文档,我最初认为我可以像这样实现我的目标:

但是,这会失败,因为两者urlSpy.hosturlSpy.pathare null

我显然误解了一些东西。我怀疑我希望的幕后魔术不是将我的间谍与在MyClass.doStuff()

如果我用 a 替换我的间谍,mockk那么 URI 对象的创建将被模拟,正如我所期望的那样。但是,在这种情况下,模拟对我来说似乎不是正确的对象......我不想模拟行为,我只想验证编码的行为。

我哪里错了?

0 投票
0 回答
109 浏览

kotlin - 如何与 mockk 中的匹配器列表进行比较,例如带有许多参数的 or()?

我正在尝试使用带有 kotest 的 mockk 来存根 api 调用,并且我想为许多潜在选项的列表返回相同的内容。or()允许我匹配两个选项,但我有点在寻找一个anyOf()in()什么的。

示例工作代码:

我的目标是拥有这样的东西,但要列出两个以上的东西,例如

我浏览了文档网站上的匹配器列表,但似乎没有找到任何符合我预期的东西。有任何想法吗?

0 投票
0 回答
361 浏览

kotlin - Kotest 无法在 IntelliJ 中正确运行

我正在使用 Gradle 和 IntelliJ 中的 Kotest 来测试一个新项目;

这些是我在 gradle 构建文件中的版本配置:

我的依赖:

和插件:

这一切都可以在 Gradle 中正常工作。但是我有来自 IntelliJ 的奇怪行为。我的 IntelliJ 版本是IntelliJ IDEA 2021.1.2 (Ultimate Edition). 插件是kotest-plugin-intellij (1.1.36-IC-2021.1).

所以我的行为是,从我可以按下运行图标的方法的测试类中,它会开始一个测试(或者至少看起来像)但是仅仅一秒钟后它已经成功完成但没有测试被执行。例如,一个简单的测试用例是这个(测试类 extends WordSpec):

我没有看到这两个Ping和下一个Basic ping test都执行了,我只能看到它Ping已经成功执行,真正的测试从未跟随。即使我故意让测试失败,Gradle 也会失败,但 IntelliJ 会告诉我一切都很好......

但是,如果我尝试运行整个程序包,它确实可以工作。所以右键单击包,然后运行,然后我选择带有Kotest绿色标志的选项,然后测试都开始执行,也是我上面粘贴的那个。

我能做些什么来解决这个问题?这是版本不匹配(但是我是最新的)?我也尝试降级,但这变得一团糟,因为我必须降级 Gradle 版本、Kotlin 版本和 Gradle 插件版本......然后根据配置,在尝试从 Gradle 构建时开始出现其他异常错误......