【发布时间】:2020-12-11 04:33:47
【问题描述】:
我正在为 Spring WebFlux 应用程序编写一些测试,并且我正在尝试模拟一个请求没有正文的场景。我伸手去拿内置的MockServerRequest,我想我会使用内置的模拟而不是自己制作。它确实允许构造一个没有主体的实例,但是我的测试都失败了,因为它提取主体contain an assertion that the body is not null 的所有方法都失败了。这似乎与实际请求的行为方式不一致。完全可以在没有主体的情况下提出请求。我还想说让代码检查是否存在主体是合理的,因为存在诸如 awaitBodyOrNull 之类的方法支持(我正在使用 Kotlin)。
我在这里遗漏/误解了什么吗?我只是通过MockServerRequest.builder().build() 来构建我的模拟(被测试的方法不关心身体以外的任何东西)。这个类可能实际上并不打算单独使用吗?我没有找到其他人问这个问题,所以我觉得我一定忽略了一些东西。
现在我将通过制作自己的模拟来解决这个问题。
【问题讨论】:
-
我没有仔细阅读发生了什么,但 Flux/Reactor 并没有在流中全部为空。你必须提交一个 Mono.empty()。因此,无论您要模拟什么,都不应在正文中返回 null,实际上它无法返回,因为流将在任何尝试尝试时中止。
-
我将标题编辑得更清楚一些。我不是想将 null 传递给模拟构建器,我只是想模拟一个没有发送正文的请求。返回
Mono.empty()(然后将被转换为 Kotlin 的null)是我所期望的行为。相反,mockRequest.awaitBodyOrNull<TestDto>()会抛出IllegalStateException,而不是返回 null。 -
哦,等等,就是这样。更仔细地查看源代码,它期望你给它的主体已经被包裹在
Mono中。我假设参数类型为Object,它会为我包裹身体(或缺少身体)。如果您想将其格式化为答案,我会给您信用。否则,我将自己关闭问题。 -
不,不用担心,很高兴您解决了问题。
-
好吧。感谢精神上的推动。 :)
标签: spring spring-webflux spring-test