Load JSON string to HttpRequestMessage

本秂侑毒 提交于 2019-11-30 18:22:32
[TestClass]
public class ShoppingCartControllerTests {
    [TestMethod]
    public void TestCourseSchedule() {
        //Arrange
        var sr = new ScheduleRequest();
        sr.Months = null;
        sr.States = null;
        sr.Zip = null;
        sr.Miles = null;
        sr.PCodes = null;
        sr.PageStart = 1;
        sr.PageLimit = 10;

        var json = JsonConvert.SerializeObject(sr);
        //construct content to send
        var content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");
        var request = new HttpRequestMessage {
            RequestUri = new Uri("http://localhost/api/shoppingcart"),
            Content = content
        };

        var controller = new ShoppingCartController();
        //Set a fake request. If your controller creates responses you will need this
        controller.Request = request;
        //Act
        // Call the controller method and test if the return data is correct.
        var response = controller.CourseSchedule(request) as OkNegotiatedContentResult<List<EventSyn‌​cResponse>> ;

        //Assert
        //...other asserts
    }
}

But I get the impression that your Action should actually be refactored like this in your controller

public class ShoppingCartController : ApiController {

    public IHttpActionResult CourseSchedule(ScheduleRequest model) { ... }

}

which would mean that your isolated unit test should be refactored to...

[TestClass]
public class ShoppingCartControllerTests {
    [TestMethod]
    public void TestCourseSchedule() {
        //Arrange
        var sr = new ScheduleRequest();
        sr.Months = null;
        sr.States = null;
        sr.Zip = null;
        sr.Miles = null;
        sr.PCodes = null;
        sr.PageStart = 1;
        sr.PageLimit = 10;

       var controller = new ShoppingCartController();
        //Set a fake request. If your controller creates responses you will need this
        controller.Request = new HttpRequestMessage {
            RequestUri = new Uri("http://localhost/api/shoppingcart"),
        };
        //Act
        // Call the controller method and test if the return data is correct.
        var response = controller.CourseSchedule(sr) as OkNegotiatedContentResult<List<EventSyn‌​cResponse>> ;;

        //Assert
        //...
    }
}

MB34. You need to add in your method, a ScheduleRequest parameter too. Check this link: http://www.lybecker.com/blog/2013/06/26/accessing-http-request-from-asp-net-web-api/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!