2010-12-01 2 views
0

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로 신청했습니다.

+0

방금 ​​코드를 복사했고 테스트가 통과되었습니다. xUnit을 사용하고 있지만 문제가되지 않는다고 생각합니다. Moq의 최신 버전을 사용하고 있습니까? –

+0

Moq 4.0.10827을 사용하고 있습니다. 여전히 최신 버전 인 것 같습니다. Mono 버그일까요? 차이점을 만들 수 있다면 Mono 2.6.7과 .NET 3.5를 사용하고 있습니다. 스택 추적에 NUnit 클래스가 표시되지 않으므로 아마도 NUnit 대 xUnit이 아닙니다. –

+1

나는 .NET 3.5를 대상으로하는 테스트를 재실행했으며 통과했다. 이 시점에서 모노와 관련된 문제인 것처럼 보입니다. –

답변

관련 문제