[英]MOQ C# QUERIES It.IsAny returning a List
夜間我取得了很大進步。 我終於設法進行了測試。 現在,我的代碼將執行第一個測試,並最終到達控制器的CREATE METHOD。 我試圖查看是否需要更改控制器方法,以便可以使用完整的對象(也許創建一個新的IF語句,檢查admin KEY和Admin Name是否不為null。關於設計模式,您有任何建議嗎?和現實的單元測試設計?
測試:
public void Creating_One_Note()
{
var note = new AdminNote()
{
NoteId = 00003,
UserKey = "89df3f2a-0c65-4552-906a-08bceabb1198",
AdminKey = "4b942342-8f73-490c-b9df-f29ac859d7d7",
NoteText = "TEST NOTE FOR THIS TEST YOU KNOW",
CreateDate = DateTime.Now,
ModifiedDate = DateTime.Now,
AdminName = "Marco",
};
var a = _controller.Create(note);
Assert.IsNotNull(a);
}
控制器創建方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(AdminNote adminNote)
{
try
{
if (ModelState.IsValid)
{
adminNote.AdminKey = System.Web.HttpContext.Current.User.Identity.GetUserId();
adminNote.AdminName = System.Web.HttpContext.Current.User.Identity.GetUserName();
adminNote.CreateDate = DateTime.Now;
adminNote.ModifiedDate = DateTime.Now;
adminNote.ObjectState = ObjectState.Added;
_adminNoteService.Insert(adminNote);
return RedirectToAction("UserDetails", "Admin", new { UserKey = adminNote.UserKey });
}
}
catch (Exception ex)
{
ControllerConstants.HandleException(ex);
ViewBag.PopupMessage(string.Format("We're sorry but an error occurred. {0}", ex.Message));
}
return View(adminNote);
}
如您所見,我的控制器方法返回一個VIEW,我知道我必須調整測試才能理解這一點。 但是,控制器方法將跳至異常,因為它試圖設置AdminKey和AdminName(我從前端獲得的信息)。 對於此測試,我正在對其進行硬編碼,並且我想查看該方法是否將其添加到存儲庫中。 在這種情況下我該怎么辦?
_adminNoteRepository.Setup(r => r.Find(It.IsAny<AdminNote>())).Returns<List<AdminNote>>(null);
這返回null
因為您告訴它:)。 Moq將您作為參數傳遞的對象Returns
給Returns
方法。 Returns
方法的類型參數(在您的情況下為List<AdminNote>
)僅指定返回值的類型,但是Moq不會自動創建該類型的實例。
如果您希望Moq返回一個非空值,那么您應該傳遞一個非空值,例如:
_adminNoteRepository.Setup(r => r.Find(It.IsAny<AdminNote>()))
.Returns<List<AdminNote>>(new List<AdminNote>());
此外,在這種情況下,編譯器可以隱式確定Returns
方法的type參數,因此您可以忽略它並簡單地編寫:
_adminNoteRepository.Setup(r => r.Find(It.IsAny<AdminNote>()))
.Returns(new List<AdminNote>());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.