关闭 #27747
[spring-projects/spring-boot]记录如何使用 WebTestClient 参数化 REST Docs 的输出目录
回答
@wilkinsona 它失败并显示消息A build scan was not published as you have not authenticated with server 'ge.spring.io'.
,我还需要做什么吗?
失败并显示消息“由于您尚未通过服务器“ge.spring.io”进行身份验证,因此未发布构建扫描。”,我还需要做些什么吗?
这不算失败。它只是表示无法将构建扫描发布到ge.spring.io
。构建本身应该不受影响。
我仍然很好奇为什么这不起作用:
@WebFluxTest
@AutoConfigureRestDocs
abstract class ContractTest {
@TestConfiguration(proxyBeanMethods = false)
static class RestDocsParameterizedOutput {
@Bean
WebTestClientBuilderCustomizer restDocsParameterizedOutput() {
return builder -> builder.entityExchangeResultConsumer(document("{class-name}/{method-name}"));
}
}
@Autowired
private WebTestClient webTestClient;
void webTestClientSetup() {
RestAssuredWebTestClient.webTestClient(webTestClient);
}
}
虽然这确实:
@WebFluxTest
@AutoConfigureRestDocs
abstract class ContractTest {
@Autowired
private ApplicationContext context;
@Autowired
private WebTestClientRestDocumentationConfigurer configurer;
void webTestClientSetup() {
RestAssuredWebTestClient.webTestClient(
WebTestClient
.bindToApplicationContext(context)
.configureClient()
.filter(configurer)
.entityExchangeResultConsumer(document("{class-name}/{method-name}"))
.build());
}
}
有没有想过为什么会发生这种情况?
谢谢!
@wilkinsona 我刚刚弄清楚了为什么会发生这种情况!这是因为 Spring Contract Test 生成的测试没有@TestConfiguration
创建WebTestClientBuilderCustomizer
bean。您能给我一些建议如何克服这个问题吗?谢谢!
@wilkinsona 它使@TestConfiguration
类外部化并导入它。例如
@WebFluxTest
@AutoConfigureRestDocs
@Import(ContractTestConfiguration.class)
abstract class ContractTest {
@BeforeEach
void webTestClientSetup(@Autowired WebTestClient webTestClient) {
RestAssuredWebTestClient.webTestClient(webTestClient);
}
}
@wilkinsona 还有什么我需要做的吗?或者这就是这次 PR 的全部内容?
您知道为什么这项concourse-ci/status
检查仍然处于失败状态吗?
失败是因为 中的代码MyWebTestClientBuilderCustomizerConfiguration
无法编译。它似乎缺少 的静态导入WebTestClientRestDocumentation.document
。包声明也不正确。不过不用担心。我们可以在合并时处理它。
让我来解决这个问题。稍等片刻。
@wilkinsona,刚刚做了 ae79b33132568e44993660cb981c167823a7c131。抱歉!:(
@wilkinsona 仍然失败!我还犯了其他错误吗?:(
@brneto 这只是一个小的 checkstyle 违规。您可以推送另一个提交来修复它,或者如 Andy 所说,我们很乐意在合并时修复它。
@wilkinsona 我正在将我的项目迁移到 Gradle,之后我开始从我的测试中收到此错误消息:
java.lang.NoClassDefFoundError: org/springframework/restdocs/ManualRestDocumentation
at org.springframework.boot.test.autoconfigure.restdocs.RestDocumentationContextProviderRegistrar.registerBeanDefinitions(RestDocumentationContextProviderRegistrar.java:41)
at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:396)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:723)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:395)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:157)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:129)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:343)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
Caused by:
java.lang.ClassNotFoundException: org.springframework.restdocs.ManualRestDocumentation
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
... 79 more
我没有更改代码中的任何内容,但仍然出现此错误qradle cleanTest test
。有什么建议吗?
@brneto Spring Boot 拉取请求不是寻求 Spring REST Docs 支持的好地方。请在 Stack Overflow 或Gitter上提问。
@brneto 非常感谢您为 Spring Boot 做出的第一次贡献。