単体テストを現在のプロジェクトの設計にどのように結びつけることができるかについて、私は少し迷っています。私の現在のテストはすべて統合テストであり、最終的にはサードパーティの ORM をテストするだけです。リポジトリ パターンを使用する必要があると考えていましたが、それをアプリケーションのレイヤーとして追加する方法が正確にわかりません。例として、私が使用している基本的なオブジェクトを次に示します。
public class Venue : ModelBase<Venue>
{
public Venue ()
: base()
{
}
public virtual string VenueName { get; set; }
}
そしてそのアクション:
[HttpGet]
public ActionResult Create ()
{
return View();
}
public ActionResult Create ([ModelBinder(typeof(VenueBinder))]Venue Venue)
{
Venue.Save();
return RedirectToAction("List", "Venue");
}
[HttpGet]
public ActionResult Edit (long id)
{
return View(Venue.Load(id));
}
[HttpPost]
public ActionResult Edit ([ModelBinder(typeof(VenueBinder))]Venue v, long id)
{
VenueBinder.EditModel(v, id);
return RedirectToAction("List", "Venue");
}
public ActionResult Delete (long id)
{
Venue temp = Venue.Load(id);
var eventController = new EventController();
foreach (var e in Event.All().ToList().FindAll(x => x.Venue.ID == id))
{
eventController.Delete(e.ID);
}
temp.Delete();
return RedirectToAction("List", "Venue");
}
およびモデル バインダー:
public class VenueBinder : IModelBinder
{
/// <summary>
/// bind form data to Venue model
/// </summary>
public object BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return new Venue
{
VenueName = bindingContext.ValueProvider.GetValue("name").AttemptedValue
};
}
/// <summary>
/// edits an existing Venue object
/// </summary>
public static void EditModel (Venue v, long id)
{
Venue temp = Venue.Load(id);
temp.VenueName = v.VenueName;
temp.Save();
}
}