Web Api單元測試寫法


例如我們在Web Api項目中有個Controller

public class SomeController : ApiController
{
    public HttpResponseMessage Get()
    {
        // 一些操作
        return Request.CreateResponse(HttpStatusCode.OK, someModel);
     }
}

如果你在單元測試中直接調用 SomeController 的Get()方法,那么你將會收到一個Exception提示Request為Null。

因此我們需要在測試代碼中構造一個Request,有兩種方法

1、簡單構造法

[TestMethod]
public void UnitTestMethod()
{
    // 環境准備部分
    YourNameSpace.Controllers.SomeController controller = new SomeController();
    
    // 下面兩個語句是構造一個簡單的請求報文
    controller.Request = new HttpRequestMessage();
    controller.Request.SetConfiguration(new HttpConfiguration());

    var result = controller.Get();

    // 斷言
}

2、可控性更強的構造

[TestMethod]
public void UnitTestMethod()
{
    // 環境准備部分
    YourNameSpace.Controllers.SomeController controller = new SomeController();
    
    var config = new HttpConfiguration();
    var request = new HttpRequestMessage(HttpMethod.Post, "YourUrl");
    var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
    var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });

    controller.ControllerContext = new HttpControllerContext(config, routeData, request);
    controller.Request = request;
    controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;

    var result = controller.Get();

    // 斷言
}

然后就可以運行單元測試查看結果了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM