B
메서드를 호출하는 클래스 A
이 있는데, 메서드 자체 중 하나가 연속 메서드로 전달됩니다. B
은 결과가있을 때 호출해야합니다. 코드는 실제로 잘 작동하는 것처럼 보이지만 Moq을 사용하여 테스트하는 방법을 알 수 없습니다. 명백한 것을 시도하면 System.ArgumentException : method argument length mismatch
이 생성됩니다. , 내가 아직 이해가 안 대표와 일부 무대 뒤의 마법이있다 같은데요Moq : 특정 대리자를 사용하여 메서드가 호출되었는지 확인하면 "메서드 인수 길이가 일치하지 않습니다."
public class A
{
readonly B myB;
public A (B b)
{
myB = b;
}
public void HandleC (C c)
{
// do something
}
public void DoFindC()
{
myB.FindC (HandleC);
}
}
public interface B
{
// Finds a C and then passes it to handleC
void FindC (Action<C> handleC);
}
public interface C
{
}
[TestFixture()]
public class ATest
{
[Test()]
public void TestDoFindC()
{
Mock<B> bMock = new Mock<B>();
A a = new A(bMock.Object);
a.DoFindC();
bMock.Verify(b => b.FindC(a.HandleC));
}
}
: 먼저 내 코드 수 있습니다에 생각하지만, 다음과 같은 장난감의 경우와 같은 방법으로 실패 C#에 대해 비교적 새로운 것이지만 이것을 테스트하는 올바른 방법은 무엇입니까?
업데이트 : 참고로, 나는 맥 OS 10.6.5에 모노 2.6.7를 사용하여 .NET 3.5을 목표로하고있다.
다시 업데이트 : 추측이는 모노 버그이다; 나는 https://bugzilla.novell.com/show_bug.cgi?id=656918로 신청했습니다.
방금 코드를 복사했고 테스트가 통과되었습니다. xUnit을 사용하고 있지만 문제가되지 않는다고 생각합니다. Moq의 최신 버전을 사용하고 있습니까? –
Moq 4.0.10827을 사용하고 있습니다. 여전히 최신 버전 인 것 같습니다. Mono 버그일까요? 차이점을 만들 수 있다면 Mono 2.6.7과 .NET 3.5를 사용하고 있습니다. 스택 추적에 NUnit 클래스가 표시되지 않으므로 아마도 NUnit 대 xUnit이 아닙니다. –
나는 .NET 3.5를 대상으로하는 테스트를 재실행했으며 통과했다. 이 시점에서 모노와 관련된 문제인 것처럼 보입니다. –