ServiceStack - 检查单元测试中的 WSDL 更改

Posted

技术标签:

【中文标题】ServiceStack - 检查单元测试中的 WSDL 更改【英文标题】:ServiceStack - Check for WSDL changes in a unit test 【发布时间】:2021-12-02 13:01:45 【问题描述】:

如果 WSDL 发生变化,我们想要一个失败的单元测试。

可能的逻辑: 生成一个新的 WSDL,并将其与存储在单元测试旁边的文件中的元数据页面中的旧 WSDL 进行比较。

问题:这可能吗?如果是,我们如何在单元测试中生成新的 wsdl?

我们使用 5.11 版

【问题讨论】:

【参考方案1】:

ServiceStack 的 SOAP Support 仅支持 ASP.NET Framework 主机,这使其无法在 integration test 中运行,而 integration test 则在 HttpListener Self Host 中运行,但您的情况可能会有所不同,并且可能适用于您的情况。

这是一个快速集成测试示例,它检查 WSDL 中的 SOAP compatible ServiceStack 服务:

[DataContract]
public class Hello : IReturn<HelloResponse>

    [DataMember]
    public string Name  get; set; 


[DataContract]
public class HelloResponse

    [DataMember]
    public string Result  get; set; 


class MyServices : Service

    public object Any(Hello request) => 
        new HelloResponse  Result = $"Hello, request.Name!" ;


public class AppHost : AppSelfHostBase

    public AppHost() : base("MyApp Tests", typeof(MyServices).Assembly) 

    public override void Configure(Container container)
    
        Plugins.Add(new SoapFormat());
    

然后,集成测试只需向/soap12 发出GET 请求以检索其 WSDL:

[TestFixture]
public class Tests

    const string BaseUrl = "http://localhost:20000/";
    ServiceStackHost appHost;

    [OneTimeSetUp]
    public void OneTimeSetUp() => appHost = new AppHost()
        .Init()
        .Start(BaseUrl);

    [OneTimeTearDown]
    public void OneTimeTearDown() => appHost.Dispose();

    [Test]
    public void Check_wsdl()
    
        var wsdl = BaseUrl.CombineWith("soap12").GetJsonFromUrl();
        wsdl.Print();
    

如果自主机不起作用,您需要针对正在运行的 IIS/ASP.NET 主机对其进行测试以获取其 WSDL。

【讨论】:

以上是关于ServiceStack - 检查单元测试中的 WSDL 更改的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地对使用 IServiceGateway 调用其他内部服务的 ServiceStack 服务进行单元测试

关于ServiceStack.Redis的一些问题

如何检查单元测试中的值是不是为nan?

如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?

如何在单元测试中验证Flurl Http中的请求正文内容?

Unity游戏开发浅谈Unity游戏开发中的单元测试