我只是新單元測試和ASP.NET MVC。我一直在試圖用Steve Sanderson的「Pro ASP.NET MVC框架」讓我的頭腦同時進入。在這本書中有這樣一段代碼:Moq中的Verify()有多可靠?
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(產品)」;「如:
...
productsRepository.SaveProduct(product);
productsRepository.DeleteProduct(product);
...
測試通過(即縱容災難性[催眠+智能感知誘導的錯字:))
可這測試寫入更好?或者有什麼我應該知道的?非常感謝。
是的。一些模擬框架支持嚴格的模擬,這將驗證模擬上沒有其他方法被調用,但這些方法往往導致脆弱的測試。 – TrueWill 2010-04-09 22:19:50