NHibernate, ASP.NET MVC 2.0 및 StructureMap을 사용하여 새 프로젝트를 시작하고 테스트를 위해 NUnit 및 Moq을 사용하고 있습니다. 각 컨트롤러에 대해 하나의 공용 생성자를 사용하여 Session을 주입합니다. 응용 프로그램 자체는 잘 작동하지만 유닛 테스트 측면에서 컨트롤러를 테스트하기 위해서는 본질적으로 Session을 조롱해야합니다.Moq를 사용하여 NHibernate Session을 조롱
나는 MOQ로 ISession을 모의 할 때 나는 다음과 같은 오류 메시지가 얻을 : 중간 호출
내 문제의 목록을 기대하는 것 같습니다에
만 속성 액세스가 지원됩니다 을 프레임 워크 CreateQuery 메서드에서 사용자가 있지만 지금은 명확한 문제를 인터넷 검색 후.
나는 두 가지 질문이 있습니다 성공적으로 내 목록을 반환 할 수 있도록 코드를 수정하는 방법을
1)이이 ISession
2)의 의존성 주입을 조롱하는 잘못된 방법입니다 있나요
[Test] public void DummyTest() { var mock = new Mock<ISession>(); var loc = new Mock<User>(); loc.SetupGet(x => x.ID).Returns(2); loc.SetupGet(x => x.FirstName).Returns("John"); loc.SetupGet(x => x.LastName).Returns("Peterson"); var lst = new List<User> {loc.Object}; mock.Setup(framework => framework.CreateQuery("from User").List<User>()).Returns(lst); var controller = new UsersController(mock.Object); var result = controller.Index() as ViewResult; Assert.IsNotNull(result.ViewData); }
내가 그냥 (개인 사용자를 조롱하고 목록에 추가가 아닌) 사용자의 하드 코딩 된 목록을 만들 수있는 확신,주의하지만 난 그것을 가지고 내가 코드를 떠날 거라고 생각하세요 지금.
또한이 특정 컨트롤러의 인덱스 동작은 위에서 흉내 낸 CreateQuery 호출을 실행하여 데이터베이스의 모든 사용자를 반환합니다. 이것은 인위적인 예입니다. 세부 정보를 읽지 마십시오. 당신의 도움이
편집에 미리
감사 : 아래의 댓글에 답글 달기에서, 나는 오류의 스택 트레이스를 추가하고있다. 또한 User 클래스의 모든 속성은 가상입니다.
TestCase에 'Beta.Tests.Unit.Controllers.UserControllerTest.Details_InValidIndex_ReturnsNotFoundView' 실패 : System.NotSupportedException : 만 속성 액세스가 설정에 중간 호출에 을 지원합니다. 지원되지 않는 표현식 framework.CreateQuery ("사용자"). Moq.ExpressionVisitor.Visit에서 Moq.Mock.AutoMockPropertiesVisitor.VisitMethodCall에서 Moq.ExpressionVisitor.Visit (식 EXP)에서 Moq.Mock.AutoMockPropertiesVisitor.VisitMethodCall (MethodCallExpression m) (m MethodCallExpression )에서 (식 Moq.Mock에서 Moq.Mock.GetInterceptor (LambdaExpression 람다, 모의 모의)에서 Moq.Mock.AutoMockPropertiesVisitor.SetupMocks (식 식)에 EXP). Moq.Mock.Setup [T1, TResult]에서 <> c__DisplayClass12
2.<Setup>b__11() at Moq.PexProtector.Invoke[T](Func
1 함수) (모의 모의, 식1 expression) at Moq.Mock
1.Setup [TResult (Expression`1 식) 컨트롤러 \ UserControllerTest.CS (29,0) : Beta.Tests.Unit.Controllers.UserControllerTest.Details_InValidIndex_ReturnsNotFoundView()
오류 스택 추적을 표시 할 수 있습니까? 사용자 속성은 추상 또는 가상입니까? –