如何对使用HttpClient的MVC控制器操作进行单元测试

时间:2015-02-20 18:25:45

标签: c# asp.net-mvc asp.net-mvc-4 unit-testing asp.net-web-api

我正在尝试测试以下MVC控制器Action,它正在调用Web API以获取产品列表:

public ActionResult Index()
{
    var model = new List<Product>();

    using(HttpClient client = new HttpClient())
    {
        model = client.GetAsync(uri).Result.Content.ReadAsAsync<List<Product>>().Result;
    }

    return View(model);
}

我正在尝试对此进行单元测试,尝试使用Telerik JustMock进行测试,例如:

[TestMethod]
    public void IndexDisplaysAllProducts()
    {                                       // Not sure how to call here
        var repo = Mock.Arrange(() => (new List<Product>())).Returns(
                new List<Product> { 
                    new Product(), 
                    new Product(), 
                    new Product()
                });

        var controller = new ProductsController();

        var result = (ViewResult)controller.Index();
        var model = (List<Product>)result.Model;

        Assert.AreEqual(3, model.Count);
    }

只是想知道你将如何测试它?

1 个答案:

答案 0 :(得分:2)

移动atm,请原谅简洁。实现一个httpclientfactory类和Ihttpclientfactory接口,使用ioc将其注入ctor,然后在测试期间模拟以创建一个模拟的http客户端实例。

或者,甚至更简单的测试,你可以使用这种方法来实现一个工厂类,用于完成你使用http客户端的所有东西(GetAsync(uri).Result.Content.ReadAsAsync&gt ;()等)

H个