我正在尝试将Spring Boot应用程序的一些集成测试从RestTemplate
迁移到WebClient
。目前,测试使用的是testrestemplate
@Autowired
private TestRestTemplate restTemplate;
当测试运行时,restemplate
被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。
在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到WebClient
,就像这样
WebClient webClient = WebClient.create()
var authResult = webClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.retrieve()
.toBodilessEntity()
.block();
// save the token that was issued and use it for subsequent requests
this.authHeader = authResult.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
但是当我像这样创建WebClient
实例时,它没有配置为使用与应用程序相同的端口。
我尝试使用TestWebClient
的依赖注入实例
@Autowired
private WebTestClient webTestClient;
这确实会将web客户端连接到服务器(相同的基本URL和端口),但是WebTestClient
API与WebClient
有完全不同的API。具体来说,它似乎只允许断言响应的属性,例如,您可以断言存在特定的响应头值,但无法保存该头的值。
var authResult = webTestClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.exchange()
.expectHeader()
.exists(HttpHeaders.AUTHORIZATION);
有没有办法:
WebClient
实例,该实例被配置为使用与服务器相同的基本URL和端口WebTestClient
实例并访问响应属性(而不仅仅是断言它们)您可以完全访问WebTestClient
结果:
webTestClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.exchange()
.expectHeader()
.exists(HttpHeaders.AUTHORIZATION)
.returnResult(Map.class);
我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的
Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6
我尝试编写一个联调的Spring Data Elastisearch存储库在SpringBoot使用测试容器和junit5 org . spring framework . beans . factory . unsatisfieddependencyexception:创建名为“com . example . demo . addressrepositorytest”的bean时出错:通过字段“
第一:是的,我读到了https://dropwizard.github.io/dropwizard/manual/testing.html 我想做一些集成测试,以及为什么我必须启动整个应用程序。现在的问题是,我有一些与“外部世界”的接口,如DB或一个内部的Rest-Client,它与一个远程应用程序交谈。我想用嘲弄来嘲笑他们。通常这没问题。 现在我的问题是:如何使用模拟数据库和模拟客户端启动整个应
我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit