簡體   English   中英

單元測試和測試測試

[英]Unit tests and testing the test

我的應用程序可以更新項目。 我想為此創建一個單元測試。

這是使用Moq在c#中實現的。 當我在模擬中調用setup方法時。 我正在使用現有項目,然后根據需要對其進行更新。

messageMock.Setup(m => m.SaveMessage(It.IsAny<Message>()))
           .Callback((Message msg) =>
{
    var oldMsg = _messages.FirstOrDefault(m => m.Id == msg.MessageID);
    if (oldMsg != null)
    {
        oldMsg.Description = msg.Description;
        oldMsg.IsActive = msg.IsActive;
        oldMsg.Name = msg.Name;
        oldMsg.Type = msg.Type;
    }
}).Verifiable();

被測方法為:

public void SaveMessage(Message message) 
{ 
    var windowsIdentity = WindowsIdentity.GetCurrent(); 
    message.ModifiedBy = windowsIdentity != null ? 
                         windowsIdentity.Name : 
                         string.Empty; 
    message.ModifyDate = DateTime.Now; 
    Messaging.Entry(message).State = EntityState.Modified;        
    Messaging.SaveChanges(); 
} 

如果更新項目的邏輯是在Moq中完成的,那么我只是在測試測試。 如何測試更新功能的業務邏輯?

我認為,您的問題沒有直接答案。

您的問題是您的消息類違反了正弦責任原則-在一個類中一次執行多項操作(執行驗證,保存到數據庫等)或緊密耦合。

單元測試不適用於這種代碼。 為了能夠對保存方法進行單元測試,您需要將所有方面提取到單個單元(例如,類)中,然后分別進行測試。

這樣一來,您將獲得一個用於驗證的類,一個用於進行實際保存的類,您的域對象等。 然后將這些類組合在一起以構成整個事物。

現在,您可以分別測試每個類,您可能會發現唯一需要嘲笑的就是實際的編寫過程。

暫無
暫無

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

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