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