[spring-projects/spring-boot]记录如何使用 WebTestClient 参数化 REST Docs 的输出目录

2024-07-08 641 views
1

关闭 #27747

回答

3

@wilkinsona 它失败并显示消息A build scan was not published as you have not authenticated with server 'ge.spring.io'.,我还需要做什么吗?

7

失败并显示消息“由于您尚未通过服务器“ge.spring.io”进行身份验证,因此未发布构建扫描。”,我还需要做些什么吗?

这不算失败。它只是表示无法将构建扫描发布到ge.spring.io。构建本身应该不受影响。

6

我仍然很好奇为什么这不起作用:

@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());
    }
}

有没有想过为什么会发生这种情况?

谢谢!

7

@wilkinsona 我刚刚弄清楚了为什么会发生这种情况!这是因为 Spring Contract Test 生成的测试没有@TestConfiguration创建WebTestClientBuilderCustomizerbean。您能给我一些建议如何克服这个问题吗?谢谢!

9

@wilkinsona 它使@TestConfiguration类外部化并导入它。例如

@WebFluxTest
@AutoConfigureRestDocs
@Import(ContractTestConfiguration.class)
abstract class ContractTest {

    @BeforeEach
    void webTestClientSetup(@Autowired WebTestClient webTestClient) {
        RestAssuredWebTestClient.webTestClient(webTestClient);
    }
}
8

@wilkinsona 还有什么我需要做的吗?或者这就是这次 PR 的全部内容?

您知道为什么这项concourse-ci/status检查仍然处于失败状态吗?

8

失败是因为 中的代码MyWebTestClientBuilderCustomizerConfiguration无法编译。它似乎缺少 的静态导入WebTestClientRestDocumentation.document。包声明也不正确。不过不用担心。我们可以在合并时处理它。

8

让我来解决这个问题。稍等片刻。

0

@wilkinsona,刚刚做了 ae79b33132568e44993660cb981c167823a7c131。抱歉!:(

0

@wilkinsona 仍然失败!我还犯了其他错误吗?:(

2

@brneto 这只是一个小的 checkstyle 违规。您可以推送另一个提交来修复它,或者如 Andy 所说,我们很乐意在合并时修复它。

8

@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。有什么建议吗?

7

@brneto Spring Boot 拉取请求不是寻求 Spring REST Docs 支持的好地方。请在 Stack Overflow 或Gitter上提问。

8

@brneto 非常感谢您为 Spring Boot 做出的第一次贡献。