NMock - 이 매개변수에 '모든 값'을 기대한다고 말하는 방법은 무엇입니까?아니면 이 일을 하지 말아야 할까요?

StackOverflow https://stackoverflow.com/questions/1901506

  •  19-09-2019
  •  | 
  •  

문제

NMock2.0에 관한 문서에서 알아낼 수 없는 간단한 질문이 있습니다.

모의하려는 Save()라는 함수가 있습니다.이것은 문자열 ID를 매개변수로, 십진수를 값으로 사용합니다.

Save()가 2개의 특정 값으로 호출되는지 확인하기 위해 다음과 같이 작성할 수 있다는 것을 알고 있습니다.

    Expect.Once.On(dao) _
    .Method("Save").With(New Object() {"foo", 1})

그러나 이는 "foo"와 1이 전달된 경우에만 전달됩니다.나는 "foo" 값을 제어할 수 있지만 두 번째 값에 대해서는 그것이 어떻게 될지 모릅니다.또는 적어도 이 특정 테스트에서는 그 가치가 무엇인지 테스트하는 데 관심이 없습니다.

나는 다음과 같이 쓸 수 있다는 것을 안다:

    Expect.Once.On(dao) _
    .Method("Save").WithAnyArguments()

그러나 이것은 내가 어떤 논쟁에도 통과할 수 있게 해줄 것입니다.따라서 저장 인터페이스가 변경되고 나중에 5개의 매개변수를 사용하는 경우에도 테스트는 통과할 것입니다.

적절한 유형의 매개변수 2개만 사용하도록 하려면 어떻게 해야 하나요?

아마도 더 중요한 것은, 이와 같은 단위 테스트를 작성하는 것이 너무 취약한 것일까요?매개변수를 예상하도록 코딩하여 리팩터링할 때마다 다시 돌아와서 해당 줄을 변경할 필요가 없도록 해야 할까요?나는 많은 모의 객체를 사용하는 테스트 케이스가 매우 취약하고 리팩토링할 때마다 이를 변경해야 한다는 것을 발견했습니다...어쩌면 내가 여기서 모의를 잘못 사용하고 있는 것은 아닐까?이 항목에 대해서는 아직 꽤 새로운 것이므로 어떤 조언이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

사용 Is.TypeOf() 값에 관계없이 특정 유형과 일치하는 매처입니다.당신은 다음과 같은 것을 원합니다 :

Expect.Once.On(dao).Method("Save").With(Is.TypeOf(typeof(string)));

합리적인지 아닌지에 관해서는 메소드가 지정된 입력 유형의 매개변수를 처리할 수 있는지 확인하려는 경우 일반적인 경우에는 괜찮다고 말하고 싶습니다.예를 들어, Car 기대하는 메소드에 Vehicle;메서드가 파생된 유형을 올바르게 처리할 수 있는지 확인하는 것이 유용합니다.

다른 팁

간단한 클래스를 만들 수 있습니다.

class DontCare
{
    public override bool Equals(object obj)
    {
        return true;
    }
}

Expect.Once.On(dao).Method("Save").With(new DontCare());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top