2011-09-20 3 views
0

Moq를 배우려고하고 있지만 다소 어려움이 있습니다.MVC3 Moq 계정 컨트롤러 C# nUnit

새 MVC3 프로젝트의 계정 컨트롤러에 대해 nUnit 및 Moq을 사용하여 몇 가지 기본 테스트를 구현하려는 경우 어떻게해야합니까?

엔티티 프레임 워크에 사용되었습니다. 그러나 그것에 대한 인터페이스를 구축하지 않습니다.

편집 : 나는 모든 그것을 할 필요의 이론을 이해하지만, 그것을 구현 내가 인터페이스

에 사용할 수있는 코드를 생성하는 엔티티 코드 생성기 (dbContext)를 사용하고 나에게

을 혼란

답변

0

좋습니다. 다음은 좋은 테스트입니다. 새 사용자를 등록 할 때 자동으로 사이트에 로그인해야하므로 사용자 이름과 암호를 다시 입력 할 필요가 없습니다.

public void AutomaticallySignedInAfterRegistering() 
{ 
    var membershipService = new Mock<IMembershipService>(); 
    var formsService = new Mock<IFormsAuthenticationService>(); 
    RegisterModel newUser = new RegisterModel(); 
    newUser.UserName = "John" 
    newUser.Email = "[email protected]" 
    newUser.Password = "[email protected]"; 
    newUser.ConfirmPassword = "[email protected]"; 

    membershipService.Setup(x => x.CreateUser("John", "[email protected]", "[email protected]")).Returns(MembershipCreateStatus.Success); 

    AccountController controller = new AccountController(); 
    controller.FormsService = formsService.Object; 
    controller.MembershipService = membershipService.Object; 

    controller.Register(newUser); 

    formsService.Verify(x => x.SignIn("John", false), Times.Once()); 
} 

의 핵심은 여기 확인 방법 :

시험은 다음과 같이 될 것이다. 그것은 Assert와 똑같이 작동합니다. 이 경우 SignIn 메서드가 정확히 한 번 호출되었다는 것을 확인할 수 있습니다. 이것은 mock을 사용하여 계정 컨트롤러가 예상대로 작동하는지 확인하는 방법의 예입니다.

+0

감사합니다. 좋은 테스트로 시작하는 것 같습니다. 질문 하나, EDMX 엔티티 프레임 워크 엔티티 용 인터페이스를 만드는 가장 쉬운 방법은 무엇입니까? "DBContext Generator"가 설치되어 있지만 인터페이스를 만들지 않습니다. 각 엔티티에 대한 클래스 만 있습니다. 모든 올바른 함수가 있습니다. – JustAnotherDeveloper

+0

DbContext를 사용자 정의 클래스 내에 랩핑하십시오. 나는 대개 'IDbContext'와 'EntityFrameworkDbContext'라는 클래스와 같은 인터페이스를 사용합니다. 이 클래스는 EDMX에 작성된 DbContext를 내부적으로 사용합니다. 모든 컨트롤러와 서비스는 IDbContext를 사용합니다. – goenning

관련 문제