2017-12-17 33 views
1

쉽게 법에가짜에 MustHaveHappend (Collection.That.Contains (객체))를 주장하는 방법 그것이 내가 과정 저장소를

A.CallTo(
      () => _courseClientStatusRepository.GetTnCoursesForClientStatus()).Returns(new List<CourseClientStatusCreationDto> 
       { 
        new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Beginner }, 
        new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Intermediate, }, 
        new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Advanced, } 
       } 
      ); 

정렬 나는

를 호출하는 방법을 ICourseClientStatusRepository

의와 어설에서

void CreateClientCourseStatus(List<CourseClientStatusDto> courseClientStatusDto); 

방법은, 나는 다음과 같은 수 있습니다. 첫 번째 주장이 통과되고 두 번째와 세 번째 주장이 실패합니다.

나는 적어도 그것의 특정 값이 중요하지 않은 유형 CourseClientStatusDto의 개체의 인스턴스를 기대하고 있어요에 전달하는 두 번째 어설 기대하고
A.CallTo(
      () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.Ignored)) 
      .MustHaveHappened(); 

     A.CallTo(
      () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Contains(A<CourseClientStatusDto>.Ignored))) 
      .MustHaveHappened(); 


     A.CallTo(
      () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Contains(A<CourseClientStatusDto>.That.Matches(
       x => x.CourseTnId == Enums.CourseLevel.Beginner    
       )))) 
       .MustHaveHappened(); 

은, 그러므로 나는 .Ignored 속성을 사용했다.

아마도 컬렉션에 특정 객체가 포함되어있는 경우 어설 션하는 것이 잘못된 것일까? (쉽게 가짜를 사용하여 .mustHaveHappened() 메소드)?

답변

0

@Ntu, 내가 사용하는 FakeItEasy의 버전을 물어볼 수 있습니까?

A<T>.Ignored 속성은 호출 구성 또는 확인 중에 매개 변수 지정자로 사용될 때만 적용 할 수 있습니다. 다른 곳에서는 사용할 수 없습니다 (예 : Contains 메소드). FakeItEasy 4.1.1부터는 이것을 나타내는 명확한 오류가 나타납니다. 예를 들어, FakeItEasy 4.3.0로, 내가 테스트의 근사치를 실행할 때 나는이를 참조하십시오

Test 'FakeItEasyQuestions2015.Ntu.NestedConstraint' failed: System.InvalidOperationException : An argument constraint, such as That, Ignored, or _, cannot be nested in an argument.

우리는 자주 패키지를 업데이트, 그래서 항상 버그 수정 및 개선을위한 업그레이드하는 것이 좋습니다.

이 같은 당신의 마지막 두 검사를 대체 할 수있다 : 내가 코멘트하고있어 동안

A.CallTo(() => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Not.IsEmpty())) 
    .MustHaveHappened(); 

A.CallTo(() => _courseClientStatusRepository.CreateClientCourseStatus(
A<List<CourseClientStatusDto>>.That.Matches(l => l.Exists(i => i.CourseTnId == Enums.CourseLevel.Beginner)))) 
    .MustHaveHappened(); 

, 내가 도울 수 없지만 정렬 당신에서 A.CallTo의 반환 값을 사용하지 않는 것을 알 수 , 그래서 당신은 실제 행동을 지정하지 않을 것입니다 (간결함을 위해 그냥 버려두지 않는 한 ...). 프로젝트에 FakeItEasy.Analyzer.CSharp을 추가하는 것이 좋습니다. 그런 문제를 경고 해 줄거야!

+1

@ Blair, 마지막 두 검사가 작동합니다. 코드가 도움이되었습니다. 감사합니다. 나는 Fake It Easy 버전 3.4.0을 사용하고 있습니다. 그리고 네, 배열의 코드를 요약하고 싶습니다. 나는 FakeItEasy를 추가 할거야. 분석가 .CSharp – Ntu