使用flurl实现主业务
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测试的测试方法
[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");
}
}测试方法执行后出现以下错误
反应既不值得
如果需要增加更多细节,请告诉我。
请告诉我我在做什么不对。
预期结果当我调用主服务方法时,我想模拟请求和响应,但不幸的是,我不能这样做
发布于 2021-05-09 14:27:28
我认为问题在于你测试的排列步骤:
httpTest.RespondWith("OK", 200).RespondWithJson(applicationItemVm);每次对RespondWith*的调用都会向队列中添加一个新的假响应,因此在这里您将排队等待2个响应。当HTTP调用在您的测试主题中进行时,Flurl将排出第一个队列,并使用该响应伪造调用,因此您将"OK"返回到响应主体中,这显然不会将JSON反归为您的ApplicationItemVm类型。这就是故障发生的地方。
要解决这个问题,只需在您的排列步骤中排队一个响应:
httpTest.RespondWithJson(applicationItemVm, 200);200是假回复的缺省值,所以你甚至可以忽略它,除非你为了可读性而喜欢它。
https://stackoverflow.com/questions/67445469
复制相似问题