После прочтения первых 7 глав Pro ASP.NET MVC Framework - очень рекомендуемое чтение, я бы сказал. На протяжении всего моего чтения автор - Стив Сандерсон , много касался некоторых практик TDD. Теперь мой вопрос:
Стив выполнял свои юнит-тесты на самих контроллерах, пример книги:
[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, поэтому ему нужно вызвать действие контроллера List, мой вопрос: достаточно ли этого? Я имею в виду, не следует ли сначала проверить его объекты Model? Стив использует LINQ2SQL в качестве своего инструмента ORM, и он практически не использует ничего, кроме функциональности LINQ, я имею в виду, что пример только выбирает данные и обновляет их, вызывая встроенные методы LINQ; нет проверки бизнеса. В моем реальном приложении необходимо выполнить множество бизнес-проверок, будет ли достаточно (или, скорее, проще) для меня начать тестирование на уровне контроллера, игнорируя мои классы Model (потому что я не думаю, что это хорошая идея)?
Жду ваших идей, Гас!