0

난 내 작은 프로젝트에 대한 몇 가지 테스트를 작성하려고 시도하고 있지만,이(DI 포함) ASP.NET MVC3에서 TDD 문제

내가를 사용 (I 1 개 테스트 'Create_Class'로 시작하고) 실패 할 것 저장소 패턴 및 사용 생성자 의존성 삽입 (Dependency Injection) : 여기

public KlasController() { 

    db = ObjectContextPerHttpRequest.Context; 
    KlasRepo = new KlasRepository(db); 
    LesRepo = new LesRepository(db); 
    OpdrachtRepo = new OpdrachtRepository(db); 
} 

//dependency injection constructor 
public KlasController(IKlasRepository KlasRepo, ILesRepository LesRepo, 
    IOpdrachtRepository OpdrachtRepo) { 

    this.KlasRepo = KlasRepo; 
    this.LesRepo = LesRepo; 
    this.OpdrachtRepo = OpdrachtRepo; 
} 

내가 nullreferenc를 얻을 순간에 내 (모든 테스트 전에 실행) testinitializer와의 TestClass과 첫 번째 테스트

[TestClass()] 
public class KlasControllerTest 
{ 
    private KlasController Controller; 
    private IOpdrachtRepository OpdrachtRepo; 

    //Use TestInitialize to run code before running each test 
    [TestInitialize()] 
    public void MyTestInitialize() 
    { 
     OpdrachtRepo = new DummyOpdrachtRepository(); 
     Controller = new KlasController(new DummyKlasRepository(), 
      new DummyLesRepository(), OpdrachtRepo); 
     Opdracht TestOpdracht = new Opdracht 
     { 
      OpdrachtID = 1, 
      VakID = 1, 
      StamNummer = "im1" 
     }; 
     Vak TestVak = new Vak { VakID = 1, VakNaam = "FOOP" }; 
     TestOpdracht.Vak = TestVak; 
     OpdrachtRepo.addOpdracht(TestOpdracht); 
    } 

    /// <summary> 
    ///A test for Index 
    ///</summary> 
    [TestMethod()] 
    public void CreateKlasDirectsToToonKlassen() 
    { 
     Klas Klas = new Klas { KlasNaam = "2dNet" }; 
     RedirectToRouteResult view = Controller.Create(1) as RedirectToRouteResult; 
     Assert.IsNotNull(view);     
     Assert.AreEqual("ToonKlassen", view.RouteValues["action"]); 

    } 
} 

입니다 뷰에 예외 상황을

을 (assert.isNotNull 실패) 여기 내 DummyRepository의 중 하나입니다

class DummyOpdrachtRepository : IOpdrachtRepository 
{ 
    List<Opdracht> opdrachten; 

    public DummyOpdrachtRepository() 
    { 
     opdrachten = new List<Opdracht>(); 
    } 

    public void addOpdracht(Opdracht opdracht) 
    { 
     opdrachten.Add(opdracht); 
    } 

    public string GetDocentID(int OpdrachtID) 
    { 
     var opdracht = opdrachten.Where(o => o.OpdrachtID == OpdrachtID).FirstOrDefault(); 
     return opdracht.StamNummer; 
    } 

    public Opdracht Find(int id) 
    { 
     return opdrachten.Where(o => o.OpdrachtID == id).FirstOrDefault(); 
    } 
} 

은 일반적으로 내가 코드를을 writting 전에, 내가 알고있는 테스트를 작성해야

(나는 TDD를 확신하고 , 내가 최근 Java 프로젝트에서 성공적으로 사용했기 때문에). 하지만 여기

나는이 코드를 많이 알고 KlasController.Create 액션

public ActionResult Create(int id) //id = opdrachtID 
{ 
    var Opdracht = OpdrachtRepo.Find(id); 
    Vak vak; 
    if(Opdracht != null) 
     vak = Opdracht.Vak; 
    else 
     throw new NullReferenceException("Deze opdracht werd niet gevonden"); 
    return View(new CreateKlasModel(id,vak)); 
} 

코드입니다 .. 작동하지 않는 것,하지만 난 정말이 일을하고 싶다. 사전 :) 나를 도와위한

덕분에

+2

테스트 방법에 따라 만들기 - 작업은 RedirectToRouteResult 유형의 결과를 반환해야합니다. 맞아? – vladimir77

답변

2

vladimir77 이미 그의 주석에서 말하기를, 방법 public ActionResult Create(int id) 유형 ViewResult이다, 그러니 당신은 return RedirectToRoute()을 수행 할 방법을 변경하거나

에 테스트를 변경
ViewResult view = Controller.Create(1); 
Assert.IsNotNull(view); 

ViewResultRedirectToRouteResult으로 캐스트 할 수 없습니다.

+0

어리석은 me : p 감사합니다. 이제 테스트가 통과하고 좀 더 (통과) 테스트를 작성했습니다. 도움이되어 주셔서 감사합니다. –

관련 문제