문제

나는 MOQ를 처음 접했기 때문에 여기서 무언가를 놓치고 있기를 바랍니다. 어떤 이유로 TargetParameterCountexception을 받고 있습니다.

내가 뭘 잘못하고 있는지 볼 수 있습니까? 질문이 있습니까? 문의하시기 바랍니다. :)

내 코드는 다음과 같습니다.

[Test]
  public void HasStudentTest_SaveToRepository_Then_HasStudentReturnsTrue()
  {
     var fakeStudents = new List<Student>();
     fakeStudents.Add(new Student("Jim"));

     mockRepository.Setup(r => r.FindAll<Student>(It.IsAny<Predicate<Student>>()))
                                .Returns(fakeStudents.AsQueryable<Student>)
                                .Verifiable();

     // in persistence.HasStudent(), repo.FindAll(predicate) is throwing 
     // 'TargetParameterCountException' ; not sure why
     persistence.HasStudent("Jim");
     mockRepository.VerifyAll();
  }

지속성의 역할 방법은 다음과 같습니다.

public bool HasStudent(string name)
  {
     // throwing the TargetParameterCountException
     var query = Repository.FindAll<Student>(s => s.Name == name); 

     if (query.Count() > 1)
        throw new InvalidOperationException("There should not be multiple Students with the same name.");

     return query.Count() == 1;
  }
도움이 되었습니까?

해결책

Findall 방법의 서명은 무엇입니까? 저장소에 FindAll 메소드가 과부하 되었습니까?

그렇다면 5월 설명이 되십시오. Lamda 표현식은 다음과 같은 여러 가지 유형으로 컴파일 할 수 있습니다. Predicate<Student>, Func<Student, bool> 또는 Expression<Func<Student, bool>>.

나는 무슨 일이 일어나고 있는지 잘 이해하지 못하지만 TargetParameterCountexception은 System.reflection 네임 스페이스에 속하는 유형이므로 MOQ는 어떻게 든 잘못된 수의 인수가있는 방법을 호출하려고한다는 것을 나타냅니다. 가장 흔한 원인은 회원이 과부하가 걸리고 잘못된 오버로드가 발생했을 때입니다 ...

다른 팁

이것은 질문에 늦었지만 Googlers를 위해 ...

나는 매우 비슷한 사례가 있고 이유를 설명 할 수 없지만 .returns () 내부의 일반 목록에서 문제를 해결할 수있는 문제가있는 것 같습니다. 모의 설정 전에 목록을 iqueryable로 설정하여 문제가 해결되었습니다. ... 같은 ...

var fakeList = new List<foo>.AsQueryable();
...
mockRepository.Setup(r => r.FindAll<foo>(It.IsAny<foo>()))
                            .Returns(fakeList)
                            .Verifiable();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top