我想在 JUnit 测试框架内使用反应式编程来对远程 REST API 进行系统测试。
我因此写道:
@Test
void testWebClient() {
WebClient webClient = WebClient.builder()
.baseUrl(GITHUB_API_BASE_URL)
.defaultHeader(HttpHeaders.CONTENT_TYPE, GITHUB_V3_MIME_TYPE)
.defaultHeader(HttpHeaders.USER_AGENT, USER_AGENT)
.filter(ExchangeFilterFunctions
.basicAuthentication(appProperties.getGithub().getUsername(),
appProperties.getGithub().getToken()))
.build();
var response = webClient.get()
.uri("/user/repos?sort={sortField}&direction={sortDirection}",
"updated", "desc")
.exchange()
.doOnError(e -> {
System.out.println(e.toString());
})
.subscribe(r -> {
System.out.println(r );
});
}
Run Code Online (Sandbox Code Playgroud)
获取我所有的 github 存储库。我不断发现这个错误:
java.lang.IllegalStateException: executor not accepting a task
Run Code Online (Sandbox Code Playgroud)
直到在“.exchange()”之后添加“.block()”以同步进行调用,一切开始正常工作。
我怀疑 JUnit 会启动一个特殊的线程上下文或类似的东西。你知道发生了什么吗?
多谢