簡體   English   中英

如何對ASP.NET Web API進行單元測試?

[英]how to unittest an asp.net web api?

我從未對asp.net Web API進行過單元測試。 該服務是關於在請求中發布JSON,並在JSON模式驗證和查詢后返回JSON結果。 只是想知道如何總體上測試Web API。 一個測試示例是發布無效的JSON字符串,並測試該字符串是否返回正確的HTTPcode(即400或類似值)。 我的服務大致如下所示:

public class MyApiController : ApiController
{
   public HttpResponseMessage Post([FromBody]dynamic value)
   {
      return response;
   }
}

另外我該如何在Web API中使用構造函數注入? 如果我在這里使用構造函數,則發布的值為null?

您可以直接創建控制器的實例。 如果使用了任何復雜的代碼,則可以為該類創建模擬以進行單元測試。 請參考鏈接以了解ASP.NET Web API的單元測試。

[Test]
    public async void GetSettingsRequest()
    {
        var getSettingsResponse = await api.GetSettings();
        Assert.IsNotNull (getSettingsResponse);
        Assert.IsTrue (getSettingsResponse.Success);
        Assert.IsNotNullOrEmpty (getSettingsResponse.Email);
    }

我做了測試項目,該項目正在api服務器上發出請求。 發出請求后,等待響應並測試響應。

我首先想到的是,您應該先弄清楚要測試的內容。 這意味着只需記下所有預期的行為,然后編寫測試以確保控制器的行為符合預期。

讓我們從兩個虛構的測試案例開始:

  • 響應不為空
  • 響應始終帶有成功狀態代碼

-

class MyApiControllerTest
{
    private MyApiController myApiControllerFixture;

    [TestInitialize]
    void Initialize()
    {
        this.myApiControllerFixture = new MyApiController();
    }

    [TestMethod]
    void MyApiController_Post_ResponseNotNullTest()
    {
        var response = this.myApiControllerFixture.Post(new { });

        Assert.IsNotNull(response);
    }

    [TestMethod]
    void MyApiController_Post_SuccessStatusCodeTest()
    {
        var response = this.myApiControllerFixture.Post(new { });

        Assert.IsTrue(response.IsSuccessStatusCode);
    }
}

只需在發現新的必需行為時添加測試,並在行為更改時刪除過時的測試即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM