簡體   English   中英

有關單元測試的基本主張

[英]basic assertions about unit testing

給定下面的功能-我是否可以斷言“值”是否已從用戶中刪除? 還是該斷言是UserService上測試的一部分?

另外,我可以從該函數測試哪些斷言?

    public IHttpActionResult Post(string value)
    {
        var user = authorizationService.GetCurrentUser();

        var isDeleted = userService.DeleteValue(value, user);
        if (!isDeleted)
        {
            return NotFound();
        }

        userService.DeleteProperty(value, user);

        var identityResult = userService.Update(user);
        if (identityResult.Succeeded)
        {
            return Ok();
        }

        return InternalServerError();
    }

是的,您可以測試:單元測試不必是每sé可能的最小單元,但是它也可以在其中包含另一個單元。 通過為這兩種情況編寫測試,您實際上就是在創建一個分層項目,其中您對不同的層及其為鏈增加的價值進行單獨的測試。

您可以在生產鏈中用增值稅進行類比,在該生產鏈中,每個測試將測試每個細分市場中增加的價值。 有關此的更多信息。

這轉化為您的問題:是的,您可以(並且應該)測試此操作方法是否完成了應做的事情。

您可以執行的一些測試示例:

  • value null
  • value不是期望的格式(數字,負值,特殊字符)
  • 找不到用戶
  • 有效的value將顯示Ok()

您需要做的是確保您不針對生產數據庫進行測試,而是使用內存中的存儲庫(嘲笑,偽造,存根,縫合)。

通過在控制器中以及在userService進行這些測試,您可以知道問題的確切位置,以防其無法正常運行:

Test for:   Controller           Service              Conclusion
            Works                Works                Works
            Works                Doesn't work         Faulty tests
            Doesn't work         Works                Controller test failed
            Doesn't work         Doesn't work         Service test failed

雖然沒有為控制器編寫測試,而是依靠服務,卻無法為您提供代碼實際起作用的信息。

單元測試和其他類型(主要是集成和驗收測試)之間的界限很窄,因為您正在測試系統的較大部分,但是我仍然認為它是單元測試,因為它包含在應用程序的邏輯中,並且不使用任何外部資源(數據庫調用被嘲笑/存根/ ...)。

暫無
暫無

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

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