[spring-projects/spring-boot]添加@WebServiceClientTest注释,可以在测试SOAP客户端时使用

2024-04-10 980 views
8

@WebServiceClientTest添加测试客户端时可以使用的切片注释SOAP

@RestClientTest其实现与but for非常相似WebServiceTemplateBuilder。公关还没有准备好,这只是一个关于如何实现的概念。

这是一个使用的小例子:

@WebServiceClientTest(ExampleWebServiceClient.class)
class WebServiceClientIntegrationTests {

    @Autowired
    private MockWebServiceServers servers;

    @Autowired
    private ExampleWebServiceClient client;

    @Test
    void mockServerCall() {
        this.servers.expect(RequestMatchers.payload(new StringSource("<request/>"))).andRespond(
                ResponseCreators.withPayload(new StringSource("<response><status>200</status></response>")));
        assertThat(this.client.test()).extracting(Response::getStatus).isEqualTo(200);
    }

    @Test
    void mockServerCall1() {
        this.servers.expect(RequestMatchers.connectionTo("https://example1"))
                .andRespond(ResponseCreators.withPayload(new StringSource("<response/>")));
        assertThatExceptionOfType(SourceAssertionError.class).isThrownBy(this.client::test)
                .withMessageContaining("Unexpected connection expected");
    }
}

如果您对此功能感兴趣,我将添加更多测试和文档。

另外,请注意https://github.com/spring-projects/spring-boot/compare/master...nosan:webservice-client-test?expand=1#diff-a0ae2b770ccb1b5cc0b45d9966df843aR66reset()中的功能会很好MockWebServiceServer班级。可以添加吗?

让我知道您的想法并提前致谢。

PS正在进行中

回答

3

@nosan 这看起来像是对现有测试切片支持的一个非常好的补充,并且将其添加到 2.2.x 中会很棒。我们不完全确定的一件事是MockWebServiceServers课程。我认为我们宁愿不在 Boot 中引入它,而是只支持单个MockWebServiceServer(类似于我们支持的方式MockRestServiceServer)。

reset()如果在课堂上有功能就太好了MockWebServiceServer。可以添加吗?

@gregturn 或许可以帮助回答这个问题。我当然希望保持干净的分离,并在 spring-ws 中使用通用的模拟代码,并保持特定于我们的切片概念的引导代码。

0

谢谢@philwebb,我添加了,MockWebServiceServers因为我还没有找到一种方法来自定义MockWebServiceServer创建MockWebServiceMessageSender延迟,因为 MockWebServiceServerMockWebServiceMessageSender一个包私有修饰符。

如果需要添加对切片注释的支持,则应添加每次测试后@WebServiceClientTest重置的可能性。MockWebServiceServer此外, 还应该添加类的公共修饰符。MockWebServiceMessageSender

1

@nosan我完全同意,我认为我们确实需要一些上游改变。

7

@gregturn 你能回顾一下上面的讨论吗?正如目前所建议的,与 Spring Web Services 交互时会出现相当多的反射,我们希望避免这种情况。

5

我不明白为什么我们不能改变 的可见性MockWebServiceServer(MockWebServiceMessageSender)。看起来是一个开放它供公众使用的有效用例。

我打开了https://jira.spring.io/browse/SWS-1085

0

2.4.7.BUILD-SNAPSHOT您可以使用或测试这些更改3.0.9.BUILD-SNAPSHOT(直到发布)。

0

如果 @nosan 希望使用这些修改来重新调整 PR,那就这样吧。

6

感谢您的反馈和更改,@gregturn

我检查过3.0.9.BUILD-SNAPSHOT,不幸的是,这些更改根本不足以避免反射。

您能否添加以下更改?

  • MockWebServiceMessageSender也必须是公开的。
  • 添加重置方法,与验证MockWebServiceServer类似,但用于重置。

“重置” 只是清除expectedConnections并设置connectionIterator为空。

理想情况下,应该删除此类。

提前致谢

9

我可以扩展 Surface API 以支持reset,但您确定不能为每个测试用例创建一个新实例吗?

4

@gregturn 在建议的更改中,MockWebServiceServer用作 bean。每个测试需要一个新实例意味着我们每个测试都需要一个新的应用程序上下文,从而使测试框架的上下文缓存变得冗余并减慢整体测试执行速度。

8

@nosan 好的,您请求的其他更改已应用。再次检查最新的快照,看看它们是否合适。

7

谢谢@gregturn

公关已更新

7

Spring WS3.0.9.RELEASE已经发布。

5

重新开放以解决 JDK 11 和 14 上的 CI 故障。

4

多谢! ?