【发布时间】:2010-04-08 08:35:52
【问题描述】:
我只是单元测试和 ASP.NET MVC 的新手。我一直在尝试使用 Steve Sanderson 的“Pro ASP.NET MVC Framework”。书中有一段代码:
public class AdminController : Controller
{
...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product product, HttpPostedFileBase image)
{
...
productsRepository.SaveProduct(product);
TempData["message"] = product.Name + " has been saved.";
return RedirectToAction("Index");
}
}
他是这样测试的:
[Test]
public void Edit_Action_Saves_Product_To_Repository_And_Redirects_To_Index()
{
// Arrange
AdminController controller = new AdminController(mockRepos.Object);
Product newProduct = new Product();
// Act
var result = (RedirectToRouteResult)controller.Edit(newProduct, null);
// Assert: Saved product to repository and redirected
mockRepos.Verify(x => x.SaveProduct(newProduct));
Assert.AreEqual("Index", result.RouteValues["action"]);
}
测试通过。
所以我故意通过添加“productsRepository.DeleteProduct(product);”来破坏代码在“SaveProduct(product);”之后如:
...
productsRepository.SaveProduct(product);
productsRepository.DeleteProduct(product);
...
测试通过了。(即宽恕一个灾难性的 [催眠 + 智能感知] 导致的错字:))
这个测试可以写得更好吗?或者有什么我应该知道的吗?非常感谢。
【问题讨论】:
标签: asp.net-mvc unit-testing mocking moq verify