首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WireMock.Net如何响应有时会出现错误,其他情况都可以

WireMock.Net如何响应有时会出现错误,其他情况都可以
EN

Stack Overflow用户
提问于 2021-07-23 06:27:50
回答 2查看 134关注 0票数 2

我正在使用WireMock.Net,我想用相同的URI配置Wiremock,它有时返回OK(200),有时返回错误响应(500)。我见过的示例总是返回相同的状态码,例如:

代码语言:javascript
复制
WireMockServer.Given(Request.Create().WithPath("/some/thing").UsingGet())
    .RespondWith(
        Response.Create()
            .WithStatusCode(200)
            .WithBody("Hello world!"));

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-23 09:10:00

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

代码语言:javascript
复制
WireMockServer.Given(Request.Create().WithPath("/some/thing").UsingPost())
                .RespondWith(new CustomResponse());

CustomResponse实现了IResponseProvider

代码语言:javascript
复制
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
        };
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-07-24 01:26:06

如果你总是想让响应交替,你可以只使用simple scenario

代码语言:javascript
复制
WireMockServer.Given(Request.Create()
    .WithPath("/some/thing")
    .UsingGet())
    .InScenario("MyScenario")
    .WhenStateIs("Started")
    .WillSetStateTo("Something")
    .RespondWith(
        Response.Create()
            .WithStatusCode(200)
            .WithBody("Hello world!"));
代码语言:javascript
复制
WireMockServer.Given(Request.Create()
    .WithPath("/some/thing")
    .UsingGet())
    .InScenario("MyScenario")
    .WhenStateIs("Something")
    .WillSetStateTo("Started")
    .RespondWith(
        Response.Create()
            .WithStatusCode(500)
            .WithBody("Error"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68492138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档