在閱讀Pro ASP.NET MVC Framework的前7章後 - 我非常推薦閱讀,我會說。在我的閱讀中,作者 - Steve Sanderson,觸及了一些TDD實踐。現在的問題是:
史蒂夫用於對控制器進行了單元測試本身,這本書的例子:
測試控制器或BusinessModel?
[Test]
public void List_Includes_All_Products_When_Category_IsNull() {
//Arrange:
IProductsRepository repository = MockProductsRepository(
new Product { Name = "First Product", Category= "Cat11"},
new Product { Name = "SecondProduct", Category = "Cat22" }
);
ProductsController controller = new ProductsController(repository);
controller.PageSize = 10;
//Act:
var result = controller.List(null, 1);
//Assert:
Assert.IsNotNull(result, "Didn't render view!");
var model = controller.ViewData.Model as IList<Product>;
Assert.AreEqual(2, model.Count, "Got wrong number of products!");
Assert.AreEqual(model[0].Name, "First Product", "Not the expected first item.");
Assert.AreEqual(model[1].Name, "SecondProduct", "Not the expected second item.");
}
我明白爲什麼史蒂夫正在測試這一點,顯然他需要檢查他的邏輯對ViewData標誌他設置,這就是爲什麼他需要調用列表控制器操作,我的問題是,這足夠嗎?我的意思是,不應該先測試他的Model對象嗎? Steve使用LINQ2SQL作爲他的ORM工具,他幾乎沒有使用LINQ功能以外的任何東西,我的意思是這個例子只選擇數據,並通過調用LINQ內置的方法進行更新;沒有業務驗證。在我的真實應用程序中,有很多應該做的業務驗證,是否足夠(或者更容易)讓我在控制器級別開始測試,忽略了我的Model類(因爲我認爲它不是一個好主意)?
等待你的想法Gus!
這就是我最終要做的。謝謝庫爾特。公認! – Galilyou 2009-09-01 09:52:50