首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试- Flurl,如何模拟flurl请求响应?

单元测试- Flurl,如何模拟flurl请求响应?
EN

Stack Overflow用户
提问于 2021-05-08 08:23:01
回答 1查看 2.5K关注 0票数 1

使用flurl实现主业务

代码语言:javascript
复制
Public async Task<ApplicationItemVm> UpdateOpportunityInfo(string optyNumber, UpdateOpportunityVm model, string token = "")
    {
     
            var result = await "https://api.com/*"
                 .WithOAuthBearerToken(token)
                .PatchJsonAsync(model)
                .ReceiveJson<ApplicationItemVm>();
            return result;
   
    }

基于MS测试测试方法

代码语言:javascript
复制
 [TestMethod]
    public async Task UpdateOppTest()
    {
       var updateOpportunityVm = new UpdateOpportunityVm
        {
            AboutYouIConfirm_c = true
        };

        var applicationItemVm = new ApplicationItemVm { AboutYouIConfirm_c=true};

        // fake & record all http calls in the test subject
        using (var httpTest = new HttpTest())
        {
            // arrange
            httpTest.
                RespondWith("OK", 200).RespondWithJson(applicationItemVm);
            // act
            var application = await applicationService.UpdateOpportunityInfo("optyNumber", updateOpportunityVm, "CloudToken");
            // assert
            httpTest.ShouldHaveCalled("https://api.com/*")
                .WithVerb(HttpMethod.Patch)
                .WithContentType("application/json");
        }

    }

测试方法执行后出现以下错误

反应既不值得

如果需要增加更多细节,请告诉我。

请告诉我我在做什么不对。

预期结果当我调用主服务方法时,我想模拟请求和响应,但不幸的是,我不能这样做

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-09 14:27:28

我认为问题在于你测试的排列步骤:

代码语言:javascript
复制
httpTest.RespondWith("OK", 200).RespondWithJson(applicationItemVm);

每次对RespondWith*的调用都会向队列中添加一个新的假响应,因此在这里您将排队等待2个响应。当HTTP调用在您的测试主题中进行时,Flurl将排出第一个队列,并使用该响应伪造调用,因此您将"OK"返回到响应主体中,这显然不会将JSON反归为您的ApplicationItemVm类型。这就是故障发生的地方。

要解决这个问题,只需在您的排列步骤中排队一个响应:

代码语言:javascript
复制
httpTest.RespondWithJson(applicationItemVm, 200);

200是假回复的缺省值,所以你甚至可以忽略它,除非你为了可读性而喜欢它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67445469

复制
相关文章

相似问题

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