如何测试返回SoapFaultClientException的SOAP端点并验证故障字符串
问题原因
默认SOAP客户端会将携带SOAP Fault的500响应判定为异常场景,直接抛出SoapFaultClientException,不会将响应内容传递给后续校验逻辑,导致测试还没走到Fault内容校验步骤就直接中断报错。
解决办法
方案一:修改SOAP客户端配置(推荐)
你当前使用的是Citrus测试框架,只需要在声明testClient的Bean配置中添加handleFaults = false,即可让客户端不将SOAP Fault作为异常抛出,直接把Fault作为普通响应返回给校验逻辑,原有测试代码无需改动即可生效。
配置示例:
@Bean public SoapClient testClient() { return CitrusEndpoints.soap() .client() .defaultUri("你的SOAP服务接口地址") .handleFaults(false) // 核心配置,关闭Fault自动抛出异常逻辑 .build(); }
方案二:测试用例中捕获异常校验
如果不想调整全局客户端配置,可修改测试代码,显式声明预期抛出SoapFaultClientException,再从异常中提取Fault内容校验:
// 发送请求时开启fork异步,不阻塞等待同步响应 runner.soap(action -> action .client(testClient) .send() // 此处补充你的请求参数配置 .fork(true)); // 校验抛出的异常内容 runner.exception(action -> action .exception(SoapFaultClientException.class) .validate(ex -> { SoapFault fault = ((SoapFaultClientException) ex.getCause(); // 校验故障码 Assertions.assertEquals("test", fault.getFaultCode().getLocalPart()); });
内容的提问来源于stack exchange,提问作者user38715
相关产品推荐
相关产品推荐

