微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WireMock.Net 如何响应有时错误和其他 OK

如何解决WireMock.Net 如何响应有时错误和其他 OK

我正在使用 wiremock.Net,我想使用相同的 URI 配置 wiremock,它有时返回 OK(200),有时返回 Error Response(500)。我见过的例子总是返回相同的状态代码,例如:

wiremockServer.Given(Request.Create().WithPath("/some/thing").UsingGet())
    .RespondWith(
        Response.Create()
            .WithStatusCode(200)
            .WithBody("Hello World!"));

例如,我如何模拟:对偶数请求返回 OK (200),对奇数请求返回 Internal-Server-Error (500)。我也想回应不同的身体。

解决方法

一段时间后,我查看了 WireMock 存储库,找到了一种方法。这只是一个例子(它不是你能写的最好的代码):

WireMockServer.Given(Request.Create().WithPath("/some/thing").UsingPost())
                .RespondWith(new CustomResponse());

CustomResponse 实现 IResponseProvider

public class CustomResponse : IResponseProvider
{
    private static int _count = 0;
    public Task<(ResponseMessage Message,IMapping Mapping)> ProvideResponseAsync(RequestMessage requestMessage,IWireMockServerSettings settings)
    {
        ResponseMessage response;
        if (_count % 2 == 0)
        {
            response = new ResponseMessage() { StatusCode = 200 };
            SetBody(response,@"{ ""msg"": ""Hello from wiremock!"" }");
        }
        else
        {
            response = new ResponseMessage() { StatusCode = 500 };
            SetBody(response,@"{ ""msg"": ""Hello some error from wiremock!"" }");
        }

        _count++;
        (ResponseMessage,IMapping) tuple = (response,null);
        return Task.FromResult(tuple);
    }

    private void SetBody(ResponseMessage response,string body)
    {
        response.BodyDestination = BodyDestinationFormat.SameAsSource;
        response.BodyData = new BodyData
        {
            Encoding = Encoding.UTF8,DetectedBodyType = BodyType.String,BodyAsString = body
        };
    }
}
,

如果您总是希望响应交替出现,您可以使用 simple scenario

getAuthorities(..)
WireMockServer.Given(Request.Create()
    .WithPath("/some/thing")
    .UsingGet())
    .InScenario("MyScenario")
    .WhenStateIs("Started")
    .WillSetStateTo("Something")
    .RespondWith(
        Response.Create()
            .WithStatusCode(200)
            .WithBody("Hello world!"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。