使用 spring-webflux 时 WebTestClient 不工作
WebTestClient does not work when using spring-webflux
我正在通过 Spring boot 2.0.0.M3 使用 Spring webflux。下面是我项目的依赖,
dependencies {
compile 'org.springframework.boot:spring-boot-starter-actuator',
'org.springframework.cloud:spring-cloud-starter-config',
'org.springframework.cloud:spring-cloud-sleuth-stream',
'org.springframework.cloud:spring-cloud-starter-sleuth',
'org.springframework.cloud:spring-cloud-starter-stream-rabbit',
'org.springframework.boot:spring-boot-starter-data-mongodb-reactive',
'org.springframework.boot:spring-boot-starter-data-redis-reactive',
'org.springframework.boot:spring-boot-starter-integration',
"org.springframework.integration:spring-integration-amqp",
"org.springframework.integration:spring-integration-mongodb",
'org.springframework.retry:spring-retry',
'org.springframework.boot:spring-boot-starter-webflux',
'org.springframework.boot:spring-boot-starter-reactor-netty',
'com.fasterxml.jackson.datatype:jackson-datatype-joda',
'joda-time:joda-time:2.9.9',
'org.javamoney:moneta:1.0',
'com.squareup.okhttp3:okhttp:3.8.1',
'org.apache.commons:commons-lang3:3.5'
compileOnly 'org.projectlombok:lombok:1.16.18'
testCompile 'org.springframework.boot:spring-boot-starter-test',
'io.projectreactor:reactor-test',
'org.apache.qpid:qpid-broker:6.1.2',
'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
}
通过 ./gradlew bootRun
或直接 运行 主应用,该应用 运行 很好。
但是由于以下错误,我无法开始集成测试。
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
我想知道为什么 WebTestClient 仍然尝试使用嵌入式 tomcat 即使我们使用的是默认使用 reactive-netty 的 webflux。
是否是 spring 引导测试的配置错误或错误?
下面是我的测试用例的代码片段,
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class NoteHandlerTest {
@Autowired
private WebTestClient webClient;
@Test
public void testNoteNotFound() throws Exception {
this.webClient.get().uri("/note/request/{id}", "nosuchid").accept(MediaType.APPLICATION_JSON_UTF8)
.exchange().expectStatus().isNotFound();
}
}
启动 tomcat 的错误是由测试依赖性 org.apache.qpid:qpid-broker:6.1.2
引起的,这取决于 javax.serlvet-api:3.1
中断 tomcat 的启动。
排除以下无用模块使tomcat再次启动,
configurations {
all*.exclude module: 'qpid-broker-plugins-management-http'
all*.exclude module: 'qpid-broker-plugins-websocket'
}
我正在通过 Spring boot 2.0.0.M3 使用 Spring webflux。下面是我项目的依赖,
dependencies {
compile 'org.springframework.boot:spring-boot-starter-actuator',
'org.springframework.cloud:spring-cloud-starter-config',
'org.springframework.cloud:spring-cloud-sleuth-stream',
'org.springframework.cloud:spring-cloud-starter-sleuth',
'org.springframework.cloud:spring-cloud-starter-stream-rabbit',
'org.springframework.boot:spring-boot-starter-data-mongodb-reactive',
'org.springframework.boot:spring-boot-starter-data-redis-reactive',
'org.springframework.boot:spring-boot-starter-integration',
"org.springframework.integration:spring-integration-amqp",
"org.springframework.integration:spring-integration-mongodb",
'org.springframework.retry:spring-retry',
'org.springframework.boot:spring-boot-starter-webflux',
'org.springframework.boot:spring-boot-starter-reactor-netty',
'com.fasterxml.jackson.datatype:jackson-datatype-joda',
'joda-time:joda-time:2.9.9',
'org.javamoney:moneta:1.0',
'com.squareup.okhttp3:okhttp:3.8.1',
'org.apache.commons:commons-lang3:3.5'
compileOnly 'org.projectlombok:lombok:1.16.18'
testCompile 'org.springframework.boot:spring-boot-starter-test',
'io.projectreactor:reactor-test',
'org.apache.qpid:qpid-broker:6.1.2',
'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
}
通过 ./gradlew bootRun
或直接 运行 主应用,该应用 运行 很好。
但是由于以下错误,我无法开始集成测试。
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
我想知道为什么 WebTestClient 仍然尝试使用嵌入式 tomcat 即使我们使用的是默认使用 reactive-netty 的 webflux。
是否是 spring 引导测试的配置错误或错误?
下面是我的测试用例的代码片段,
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class NoteHandlerTest {
@Autowired
private WebTestClient webClient;
@Test
public void testNoteNotFound() throws Exception {
this.webClient.get().uri("/note/request/{id}", "nosuchid").accept(MediaType.APPLICATION_JSON_UTF8)
.exchange().expectStatus().isNotFound();
}
}
启动 tomcat 的错误是由测试依赖性 org.apache.qpid:qpid-broker:6.1.2
引起的,这取决于 javax.serlvet-api:3.1
中断 tomcat 的启动。
排除以下无用模块使tomcat再次启动,
configurations {
all*.exclude module: 'qpid-broker-plugins-management-http'
all*.exclude module: 'qpid-broker-plugins-websocket'
}