목록 및 만들기 만 사용하는 매우 간단한 폼을 테스트하려고합니다. 이것은 컨트롤러 :모든 요청시 컨트롤러 생성자가 호출되었습니다.
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을 만들어 클래스에 묶는 것뿐입니다. –
Mock 유지 상태를 만드는 방법이 있습니다. 그러나 그것은 나에게 좋은 길로 보이지 않습니다. 객체 그래프의 게으른 로딩 및 참조가있는 객체의 삭제와 같이 고려해야 할 ORM의 중요하지 않은 측면에 대해 생각해보십시오. 페이지 플로우를 테스트하려는 경우 모의는이 시나리오에서 실제 저장소처럼 작동해야합니다. TDD를 할 때 모의 저장소를위한 장소가 분명히 있지만, 어플 리케이션을 사용할 때 애플리케이션의 작은 부분을 고수해야합니다. –