当前位置: 首页 > 知识库问答 >
问题:

两个相同的assertThrows行的行为不同

洪永长
2023-03-14
Assertions.assertThrows(HttpServerErrorException.BadGateway.class, (Executable) restTemplate.postForEntity(builder.toUriString(), request, String.class));

其中一个测试通过,另一个给出以下错误:

java.lang.ClassCastException:类org.springframework.http.ResponseEntity不能强制转换为类org.junit.jupiter.api.function.executable(org.springframework.http.ResponseEntity和org.junit.jupiter.api.function.executable位于加载器“app”的未命名模块中)

有人知道为什么会这样吗?为什么我能够将ResponseEntity强制转换为类可执行,而不是另一个测试?

共有1个答案

令狐昂雄
2023-03-14

请这样做:

  Assertions.assertThrows(HttpServerErrorException.BadGateway.class, () -> restTemplate.postForEntity(builder.toUriString(), request, String.class));

现在,您将其设置为:public responseentity postForEntity(...) 返回responseentity,然后将其强制转换为executable接口smth,如下所示:

ResponseEntity<?> responseEntity = new ResponseEtity<>(...);
Executable ex = (Executable) responseEntity; // ClassCastException

executable是一个函数接口,您应该传递lambda参数,即assertthrows方法中executable接口的实现。

 类似资料:
  • 问题内容: 我试图用来创建我的,以确保我的构建/项目的质量。该项目也需要使用和。一切在我的本地计算机上都可以正常运行,但是现在我正在尝试使环境一致,可重现。当我尝试在新的虚拟机中运行时,会中断一个在本机中正常运行但 不在 新vm中运行的。 我检查了版本,,,(其)一切都是一样的。但是,我的Maven项目在此测试中失败了。 我在这里想念什么?任何想法,建议都会受到赞赏,因为我现在还没有想法,到目前为

  • 问题内容: 我有一个看起来像这样的表: 我想运行一个查询,该查询将选择唯一的ID和值作为命名列,因此它看起来像这样: 任何帮助将非常感激!! 问题答案: 您可以使用以下简单解决方案: 为了安全起见,我创建了join ,因为我不知道id是否可以包含 缺少的 字段,在这种情况下,它们将显示在我们的派生列中。 SQL提琴演示

  • 问题内容: 我有两个字符串,它们看起来都一样: 但是,检查相等性表明它们不是。 我还尝试从命令提示符中复制两个字符串,并将它们作为新变量粘贴回去,但是它们仍然不相等。我有80%的把握是因为它们的编码方式很怪异,插入了一些我看不见的奇数字符,但是使用type()都只是显示为字符串。 有什么办法可以看到“真实”字符串?任何帮助表示赞赏。 问题答案: 他们是不一样的; using显示了这两个值之间的差异

  • 问题内容: 假设我有一个名为example的表格,如下所示: [abc] | [def] --1 — | -qwerty- --2 — | -asdf — 我想要做的是在一个SQL查询中更新两个列(仅使用一个UPDATE)。 以上是我要实现的内容,但是在一行sql中(使用MySQL)。我知道您可以这样做,但是我不确定如何使用两个不同的where语句来做到这一点。 问题答案: 您可以使用( mysq

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

  • 我是spring amqp的新手,我想创建两个行为不同的听众。问题是,我在编译时不知道队列名称,因此无法使用此解决方案。 我想做的事情是:从“sidechannel”队列中读取(然后删除)第一条消息,它应该是这样的{“queues”:[“queue1”,“queue2”]}。 现在从queue1和queue2读取(然后删除)第一条消息。之后,转至步骤1,阅读侧频道的第一条消息 正如您在下面的代码中