문제

실패한 NMock을 사용하여 다음과 같은 테스트를 받았습니다. 서비스 호출의 결과가 뷰로 전달 될 때 작동했지만 결과가 DTO로 변환되어 실패합니다.

나는 이것이 커스텀 매치자를 만들어야한다는 것을 의미 할 수도 있지만 확실하지 않습니다. 아무도 아이디어가 있습니까?

에러 메시지:

Test method Dgc.Cpo.RM.UI.Presentation.Test.ProjectPresenterTest.LoadProjectsTest threw exception:  NMock2.Internal.ExpectationException: unexpected invocation of projectView.SetProjects(<System.Collections.Generic.List`1[Dgc.Cpo.ResourceManagement.UI.Presentation.ProjectPresentationDto]>)

예상 : 1 시간 : projectView.SetProjects (동일) [0 번 호출].

암호:

public void LoadProjectsTest()
    {
        IList<ProjectServiceGetProjectsResponse> expectedGetProjectsResponse = new List<ProjectServiceGetProjectsResponse>();
        expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 1, Name = "Project 1", RefNo = "001", Complete = false, Dropped = false });
        expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 2, Name = "Project 2", RefNo = "002", Complete = true, Dropped = false });
        expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 3, Name = "Project 3", RefNo = "003", Complete = false, Dropped = true });

        IList<ProjectPresentationDto> expectedSetProjectsRequest = new List<ProjectPresentationDto>();
        expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[0]));
        expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[1]));
        expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[2]));

        ProjectPresenter_Accessor target = new ProjectPresenter_Accessor(this.mockView,
                                                                         this.mockProjectService);

        Expect.Once.On(this.mockProjectService).Method("GetProjects").Will(Return.Value(expectedGetProjectsResponse));
        Expect.Once.On(this.mockView).Method("SetProjects").With(expectedSetProjectsRequest);

        target.LoadProjects();

        this.mock.VerifyAllExpectationsHaveBeenMet();

    }
도움이 되었습니까?

해결책

당신은 그것을 얻었습니다 - 당신은 "NMOCK 2.0의 고객 매칭 자"섹션에 설명 된대로 사용자 정의 매칭과 정적 공장 클래스를 만들어야합니다. Nmock 2.0 고급 주제 문서.

기본적으로 Nmock은 사용합니다 Equals 인수와 일치하는 것은 기대치에 전달되었습니다 (귀하의 경우, LoadProjects 세트 mockView.Projects 에게 expectedSetProjectsRequest 또는 아니에요).

그만큼 List<T>.Equals 구현 (상속 Object) 단지 두 변수가 동일한 객체를 참조하는지 여부를 확인합니다, 그리고이 경우 그들은 분명히 그렇지 않습니다. ( LoadProjects 메소드 새로운 DTO 목록 인스턴스 생성 GET 액세서 결과를 DTO로 변환하는 과정에서.)

참조 평등을 확인하는 대신 Nmock에게해야 할 일을 알려야합니다. 운 좋게도 관습 ListMatcher (그리고 해당 IsList 클래스) 위에서 링크 한 Nmock 문서에서 자체적으로 트릭을 수행 할 수 있습니다. 만약에 ProjectPresentationDto.Equals 가치 평등을 확인하면 해당 예제 클래스를 사용할 수 있습니다. 그렇지 않은 경우 DTO의 평등을 정의하기 위해이를 사용자 정의해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top