Я просто смотрю в TDD с MVC 4.Должен ли я извлечь часть моего тестового кода модуля?
У меня есть orderscontroller, который принимает единицу работы интерфейса в конструкторе:
public OrdersController(IUnitOfWork db)
{
this.db = db;
}
//
// GET: /Orders/
public ActionResult Index()
{
return View(db.Orders.GetAll());
}
У меня есть несколько тестов для этого индекса() ,
[TestClass]
public class when_the_order_controller_index_action_executes
{
[TestMethod]
public void it_should_render_the_default_view()
{
var uow = new Mock<IUnitOfWork>();
var db = uow.Object;
var orders = new List<Order>()
{
new Order{CreatedDate = DateTime.Now.AddMonths(-3),OrderID = Guid.NewGuid()},
new Order{CreatedDate = DateTime.Now,OrderID = Guid.NewGuid()}
};
uow.Setup(r => r.Orders.GetAll())
.Returns(orders);
//arrange
var controller = new OrdersController(db);
//act
var result = controller.Index() as ViewResult;
//assert
Assert.AreEqual("", result.ViewName);
}
[TestMethod]
public void it_should_pass_orders_as_the_model()
{
var uow = new Mock<IUnitOfWork>();
var db = uow.Object;
var orders = new List<Order>()
{
new Order{CreatedDate = DateTime.Now.AddMonths(-3),OrderID = Guid.NewGuid()},
new Order{CreatedDate = DateTime.Now,OrderID = Guid.NewGuid()}
};
uow.Setup(r => r.Orders.GetAll())
.Returns(orders);
//arrange
var controller = new OrdersController(db);
//act
var model = ((ViewResult)controller.Index()).ViewData.Model as IEnumerable<Order>;
//assert
Assert.IsTrue(orders.Equals(model));
}
}
Вы заметите, что довольно много дублирования кода в двух тестах для создания списка, который GETALL может вернуться ...
Это хороший/плохой практикой иметь скажем повторно Полезная чтобы вернуть этот список, который может вызвать оба теста?
Любые общие рекомендации по тестам, которые я написал, будут оценены также, поскольку я только сейчас обнимаю любовь tdd!
Я только учусь TDD в данный момент, а я просто смотрю на ваш код и интересно, если я пропустил концепцию с насмешкой/тестированием Почему вы столкнулись с проблемой фактического помещения данных в ваш OUW.db макет в вашем первом тесте? Поскольку все, что вам нужно, чтобы тест был установлен как модель, является нулевым, потому что все, что вы тестируете в этом первом методе, - это то, что представление индекса было возвращено вам; вы затем проверяете, что действие индекса правильно задает модель во втором тесте. Не пытаться быть умным вообще, просто действительно интересно, если я пропустил какую-то концепцию? –