为了账号安全,请及时绑定邮箱和手机立即绑定

为 Web API 单元测试指定 HttpRequestMessage 的内容

为 Web API 单元测试指定 HttpRequestMessage 的内容

C#
守候你守候我 2022-01-16 14:32:45
我有一个要进行单元测试的 Web API 控制器方法。它接受了,HttpRequestMessage但我不知道如何设置我想要传递的内容。是否可以创建/模拟,HttpRequestMessage以便我可以给它一个string我想要的结果await request.Content.ReadAsStringAsync()?这是我的控制器方法:[HttpPost]public async Task<HttpResponseMessage> Post(HttpRequestMessage request){    var data = await request.Content.ReadAsStringAsync();    //do something with data}我可以使用其无参数构造函数轻松创建HttpRequestMessage,但我不知道如何将内容设置为有意义的值。我希望我的测试按照以下方式进行:[TestMethod]public async Task PostMethodWorks(){    var controller = new MyController();    var data = "this will be JSON";    var httpRequestMessage = new HttpRequestMessage();    //set the content somehow so that httpRequestMessage.Content.ReadAsStringAsync returns data    var response = await controller.Post(httpRequestMessage);    //assert something about the response here}是否可以将内容的值设置为某个 JSON,或者我需要更改方法以便它采用不同的参数?(对于更多的上下文,我想让方法接受 aHttpRequestMessage的原因是因为我正在处理一个遗留代码库,其中包含大量的控制器方法,这些方法接受 a HttpRequestMessage。)
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

是否可以将内容的值设置为一些 JSON


是的


您可以使用许多HttpContent派生类中的任何一种。由于在这种情况下您要发送 JSON 内容,因此您需要使用StringContent class


例如


[TestMethod]

public async Task PostMethodWorks() {

    //Arrange

    var controller = new MyController();


    var data = "this will be JSON";

    var httpRequestMessage = new HttpRequestMessage();


    //set the content somehow so that httpRequestMessage.Content.ReadAsStringAsync returns data 

    httpRequestMessage.Content = new StringContent(data, Encoding.UTF8, "application/json");



    //Act

    var response = await controller.Post(httpRequestMessage);


    //Assert

    //assert something about the response here

}

然而,这感觉就像一个XY 问题,因为理想情况下 Web API 操作不会HttpRequestMessage作为参数。


还是我需要更改方法以便它采用不同的参数?


存在模型绑定器,可用于具有强类型操作参数,这些参数将解析传入数据并填充模型,然后再传递给操作。


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号