2017-10-24 8 views
1

에 의해 반환했다 반환 값은 내가 인터페이스의 방법이있다 :MOQ 방법

_mock.Setup(theObject => theObject.GetUserDetails(It.IsAny<string>())) 
    .Returns([object return by GetUserDetails method]) ; 

아이디어가 있으십니까?

+0

당신은 부분 모의라고하고이 방법의 구체적인 구현을 사용하여 무엇을 할 수 있지만 확실히 당신이 더 길 이죠 그냥 반환 값을 조롱? 대신 예제에서 제시 한 것처럼 임의의 문자열을 반환하도록 메서드를 설정하십시오. 조롱의 요점은 테스트중인 코드를 의존성에서 분리하는 것입니다. – benjrb

+0

예, 당신의 요지를 이해했습니다. 그러나 Unit 테스트 케이스를 구현하기 위해 우리 자신의 모의 데이터를 생성하는 대신 리포지토리에서 DB로부터 리턴 한 실제 데이터 세트를 실제로 사용해야합니다. s –

+0

이 경우 단위 테스트를 작성하지 않으므로 통합 테스트를 작성해야합니다. Moq는이 시나리오에서 필요한 것이 아닙니다. 당신은이 루트를 따라 내려 가기를 원하지 않으며, 여기에 당신 자신의 위험으로 조롱하는 부분을 사용하십시오. 테스트 피라미드와 단위 테스트와 통합 테스트의 차이점을 읽어 보시기 바랍니다. – benjrb

답변

0

문제의 원인에 대해서는 부분적 조롱을 사용해야합니다. var mock = new Mock<MyClass> { CallBase = true }; : 건설에 CallBase 지정

  1. : MOQ에서 두 가지를 달성하는 방법이 있습니다. 이 경우 기본적으로이 객체 메소드를 호출하면 실제 메소드 구현이 실행됩니다. 일부 특정 방법

  2. 지정 CallBase : mock.Setup(m => m.MyMethod()).CallBase();

도 참조 When mocking a class with Moq, how can I CallBase for just specific methods?

+0

답장을 보내 주셔서 감사합니다. 당신의 두 문장이 같으면,이 객체 메소드는 실제 메소드 구현을 실행합니다. && 특정 메소드에 대해서만 기본 메소드를 호출하려는 경우. –

+0

@mayankgupta 나는 대답을 바꾸어 봤다.이 두 가지 접근 방식이 다르다. – arghtype

+0

@mayankgupta이 답이 문제를 해결했다면 옆에있는 체크 표시로 받아 들일 수있다. – arghtype