테스트 시나리오를 위해 하나의 엔티티가 있어야하는 저장소를 조롱하고 있습니다. . 저장소는RhinoMock 메소드의 인수 제약
알려진 ID를 기반으로이 개체를 반환하고 다른 ID가 전달 될 때 아무것도 돌려주지하는 나는이 같은 일을 시도 :
_myRepository.Expect(item => item.Find(knownId)).Return(knownEntity);
_myRepository.Expect(item => item.Find(Arg<Guid>.Is.Anything)).Return(null);
그것은 그러나 두 번째 줄은 재정의 것 같다을 최초로, 리포지터리 (repository)는 항상 null를 돌려줍니다. 테스트 시나리오가 한 ID의 값에만 관심이있을 때 가능한 모든 다른 ID를 모의하고 싶지는 않습니다 (수백까지 올라갈 수 있습니다).
두 번째 줄을 첫 번째 줄의 네거티브로 변경할 수 있음을 이해합니다. 그러나 저장소가 테스트 시나리오를 위해 둘 이상의 엔터티를 반환해야하는 경우이 작업은 점점 더 어려워집니다 (추악한 경우도 마찬가지입니다).
흥미 롭습니다. 스텁을 사용하면 작동합니다. 하지만 Expect (동적 또는 정적)로 바꾸면 그렇지 않습니다. 그 때의 차이점은 무엇입니까? – Khash
차이점은 Expect는 기본값이 메서드가 한 번만 실행될 것이라는 기대를 설정하고 Stub은 항상 작동한다는 것입니다. return (knownEntity) .Repeat.Any();'(또는 이와 유사한 문법) – Grzenio
'Stub'은 비헤이비어를 설정합니다. , 그것은 기대를 설정하지 않습니다. 예를 들어, 여러분의 메소드가 특정 인자로 호출되었다는 주장을하고 싶다면 테스트가 끝날 때'AssertWasCalled (x => x.Find (someId)); '를 호출해야한다. –