私はmvc 4でtddを調べています。
コンストラクターで作業単位インターフェイスを取るオーダーコントローラーがあります。
public OrdersController(IUnitOfWork db)
{
this.db = db;
}
//
// GET: /Orders/
public ActionResult Index()
{
return View(db.Orders.GetAll());
}
この Index() にはいくつかのテストがあります。
[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 が返すことができるリストを作成するための 2 つのテストには、かなり多くのコードの重複があることに気付くでしょう...
両方のテストが呼び出すことができるリストを返すために再利用可能な関数を言うのは良い/悪い習慣ですか?
私が書いたテストに関する一般的なアドバイスは、tdd 愛を受け入れるようになったばかりなので、大歓迎です!