[英]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.