2009-12-03 2 views
0

도움이 될만한 사람.ASP.NET MVC를 구현하고 테스트하는 방법 FakeRepository

저는 ASP.NET MVC 프레임 워크를 사용하여 코드를 작성하려고합니다.이 개념을 팔았습니다.

내 주요 걸림돌은 데이터베이스를 대체하는 저장소를 설정하고 테스트하는 방법입니다. MVC 응용 프로그램을 테스트하기 위해 클래스를 만들고이를 fakerepository.cs라고 부릅니다.이 클래스는 IContactManagerRepository 인터페이스의 메서드를 구현합니다.

namespace MyTestMVCProject.Models 
{ 
    public class FakeContactManagerRepository : IContactManagerRepository 
    { 
     IList<Contact> _contacts = new List<Contact>(); 

     #region IContactManagerRepository Members 

     public Contact Create(Contact contact) 
     { 
      _contacts.Add(contact); 
      return contact; 
     } 

     public Contact Edit(Contact contact) 
     { 
      throw new NotImplementedException(); 
     } 

     public void Delete(int id) 
     { 
      throw new NotImplementedException(); 
     } 

     public IList<Contact> ListContacts() 
     { 
      return _contacts; 
     } 

     #endregion 
    } 
} 

아래의 테스트 시도에서 나는 연락처가 만들어졌고 ID 값이 정확한지 확인하고자합니다.

[Test] 
public void Test_02_ContactController_Passes_ViewData_To_Details_View() 
{ 
    // Arrange 
    ContactController _controller = new ContactController(); 

    // Act 
    var _contact = new Contact 
    { 
     Id = 1, 
     FirstName = "Donald", 
     LastName = "Duck" 
    }; 

    var _result = _controller.Create(_contact) as ViewResult; 
    var contact = _result.ViewData.Model as Contact; 

    // Assert 
    Assert.AreEqual(1, _contact.Id); 
} 

불행히도 테스트는 항상 실패합니다.

물론 테스트하기가 너무 쉽지만 Google에서 검색하고 ASP.NET MVC 비디오를 보면서 짧은 시간 안에 많은 것을 습득했습니다.

누구든지 ViewResult에 목록을 반환하는 fakerepository를 테스트 할 수있는 방법을 제안 할 수 있습니까?

[Test] 
public void PostingValidContactCreatesOneInRepositoryAndReturnsViewResult() 
{ 
    // Arrange 
    var controller = new ContactController(new FakeContactManagerRepository()); 

    // Act 
    var contact = new Contact 
    { 
     Id = 1, 
     FirstName = "Donald", 
     LastName = "Duck" 
    }; 

    var result = controller.Create(contact); 

    //Assert there is one created Contact in repository 
    Assert.AreEqual(1, Repository.ListContacts().Count()); 
    //Check if result is ViewResult 
    Assert.IsInstanceOfType(result,typeof(ViewResult)); 
    //Assert item Id is 1 
    Assert.AreEqual(1, Repository.ListContacts().First().ID); 
    //Check if posting valid contact doesn't invalidate model state 
    Assert.IsTrue(controller.ModelState.IsValid); 
} 

ContactController 당신이 실제 사용은 실제 저장소를 주입 할 수 FakeContactManagerRepository으로 제공 테스트에서 생성자

public ContactController(IContactManagerRepository repository); 

에 IContactManagerRepository을한다 :

답변

2

테스트처럼 보일 수 있습니다.

편집

귀하의 오류는 다음과 같습니다

var contact = _result.ViewData.Model as Contact; 

게시 접촉 _result.ViewData.Model에서가 아니라 기능 만들기의 매개 변수에.

var _result = _controller.Create(_contact) as ViewResult; 

이것은 오류가 아닙니다,하지만 당신은

var _result = _controller.Create(_contact) 

같이 정의하고 결과가 올바른 유형의 경우 확인할 수 있습니다. 당신이 할당 이해되지 않는다

Assert.AreEqual(1, _contact.Id); 

이전 몇 줄을 _contact.Id. 저장소에서 연락을 취하여 확인해야합니다.

관련 문제