在阅读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