リストと作成のみを使用する非常に単純なフォームをテストしようとしています。これは、コントローラである:リクエストごとにコントローラコンストラクタが呼び出される
public class PositionsController : Controller
{
private readonly IPositionRepository _positions;
// default constructor
public PositionsController()
{
_positions = new TestPositionRepository();
}
// DI constructor
public PositionsController(IPositionRepository positions)
{
_positions = positions;
}
// get a list of all positions
public ActionResult Index()
{
return View(_positions.GetAllPositions());
}
// get initial create view
public ActionResult Create()
{
return View();
}
// add the new Position to the list
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Position positionToAdd)
{
try
{
_positions.AddPosition(positionToAdd);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
TestPositionRepository
は単に私が依存性注入をテストするために作成したモックリポジトリです。新しいエントリを作成しようとすると、インデックスビューに戻されますが、新しいエントリはリストに追加されません。デバッガを使用すると、リンクをクリックするたびに、またはコントローラのコントロール内のリンクに移動するたびにコンストラクタが呼び出されることが表示されます。この問題を解決する方法はありますか?私はそれが間違っていると感じている。私がしようとしているのは、Ninjectを使った依存性注入ですが、私はこれまでこの問題に固執しています。
モックリポジトリの状態を静的クラスとして保持する方法はありませんか?私は最初にデータクラスを開発し、すべてが機能していることを確認してから、モデルを使用してデータベーステーブルを設計しようとしています。私の考えは、テーブルを変更するよりもクラスを変更する方が簡単で、モックリポジトリが機能すると、それらをクラスに結び付けるORMを作成するだけです。 –
モックを維持する方法があります。しかし、それは私にとっては良い方法ではないようです。オブジェクトグラフの遅延読み込みや参照を持つオブジェクトの削除など、考慮する必要があるORMの重要な側面について考えてみましょう。ページフローをテストする場合は、このシナリオでは実際のリポジトリのように振る舞うはずです。 TDDを実行するときにモックリポジトリ用の場所がありますが、アプリケーションフローの小さな部分に固執する必要があります。 –