【发布时间】:2014-03-06 15:49:33
【问题描述】:
让我们采取以下措施:
mockSiteRepository.Setup(m => m.Sites).Returns(new Site[] {
new Site {
SiteID = 0,
DateCreated = DateTime.Now,
Name = "A",
AddressID = 0
}
}.AsQueryable());
mockAddressRepository.Setup(m => m.Addresses).Returns(new Address[] {
new Address {
AddressID = 0,
Address1 = "A",
Address2 = "B",
CityID = 0,
CountryID = 0,
StateID = 0,
ZIP = "D"
}
}.AsQueryable());
SiteViewModel testForm = new SiteViewModel
{
SiteID = 0,
DateCreated = DateTime.Now,
Name = "A",
AddressID = 0,
Address1 = "E",
Address2 = "F",
CityID = 0,
City = null,
CountryID = 0,
Country = null,
StateID = 0,
State = null,
ZIP = "J"
};
SiteController controller = new SiteController(mockChemical.Object, mockSiteRepository.Object, mockChemicalRelationRepository.Object, mockAddressRepository.Object);
ActionResult result = controller.Edit(testForm);
现在看看Edit方法(伪):
public ActionResult Edit(SiteViewModel siteViewModel)
{
if (ModelState.IsValid)
{
Address address = siteViewModel.Map();
addressRepository.Edit(address);
Site site = siteViewModel.Map(address.AddressID);
siteRepository.Edit(site);
TempData["success"] = string.Format("Site {0} was successfully edited", site.Name);
return RedirectToAction("List");
}
else
{
// Something wrong with the values
}
return View(siteViewModel);
}
您如何测试这种方法?
成功时,它会重定向到返回 ViewResult 的“List”控制器。我不想仅仅因为它已重定向就相信我的数据已成功编辑和保存...
那么我可以做些什么来检查,当我将 SiteViewModel 放入我的控制器方法时,它确实成功地编辑了现有网站。
【问题讨论】:
-
那么您要检查的是什么?存储库的 Edit() 方法是否已被调用?
-
很高兴看到我最初从 mockSiteRepository/mockAddressRepository 获得的假模型是否已使用我的 addressRepository.Edit(address) 和 siteRepository.Edit(site) 正确修改;我可以通过断言新的存储库模型等于 testForm SiteViewModel 来测试它。也许它比我最初想象的要复杂得多?
标签: c# unit-testing moq