簡體   English   中英

測試一個功能

[英]Testing A function

我需要為一個函數編寫一個單元測試。 我對測試一無所知,而且我看到的示例更多是面向數學的,因此我無法理解如何為此功能編寫測試。 任何人都可以幫我為此功能編寫單元測試:

public static void CreateUser(
    int userId, 
    string name, 
    System.DateTime createdAt, 
    string createdBy, 
    System.DateTime modifiedAt, 
    string modifiedBy, 
    string address, 
    string city, 
    string province, 
    string country, 
    string postcode, 
    string phone)
{
    try
    {
        using (UserDbContext _usermain = new UserDbContext())
        {
            User newuser = new User()
            {
                UserId = userId,
                Name = name,
                CreatedAt = createdAt,
                CreatedBy = createdBy,
                ModifiedBy = modifiedBy,
                ModifiedAt = modifiedAt,
                Address = address,
                City = city
            };
            _usermain.Users.Add(newuser);
            _usermain.SaveChanges();
        }
    }
    catch (Exception ex)
    {
        string error = string.Format("Error in Creating User", ex.Message);
        throw new Exception(error, ex);
    }
}

應該編寫單元測試來驗證函數的行為 在您的情況下,您的函數正在接收輸入並更新數據庫。 編寫單元測試將很困難,因為數據庫很難模擬。 您基本上需要找出一種方法來模擬UserDbContext ,將輸入傳遞給函數,並驗證數據庫是否已正確更新。

我建議單元測試不適用於此功能 它的唯一目的是改變一個你不能輕易模仿的外部環境。 一些變化,使其更容易測試有:

  • 注入上下文而不是創建新的上下文(因此您可以傳入模擬)。 這可能比它的價值更麻煩。
  • 使其成為兩個功能 - 一個創建User ,一個獲取User並將其插入數據庫。 (在那種情況下,我會對第一種方法進行單元測試,但不會對第二種方法進行單元測試)。 如果你已經有了一個單元測試,為User構造則不需要分離和單元測試。

作為旁注,捕獲任何異常並拋出新的通用異常不會增加價值。 事實上,由於您丟失或隱藏了以下信息,它會消除價值:

  • 原始堆棧跟蹤
  • 錯誤信息
  • 異常的類型。

當你拋出一個新的InnerException時,所有這些都被隱藏在InnerException 如果您不打算對它做任何事情,只需取出 try/catch 塊並讓原始異常冒泡。

暫無
暫無

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

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