2010-12-01 7 views
0

Ich habe eine Klasse A, die eine Methode auf der Schnittstelle B aufruft und eine ihrer eigenen Methoden als eine Art Fortsetzung weiterleitet B soll aufrufen, wenn es ein Ergebnis hat. Der Code scheint in der Praxis gut zu funktionieren, aber ich kann nicht herausfinden, wie man es mit Moq testet - wenn ich das Offensichtliche versuche, produziert es System.ArgumentException : method argument length mismatch. zuerst dachte, es könnte meinen Code sein, aber es funktioniert nicht auf die gleiche Weise mit dem folgenden Spielzeugkoffer:Moq: Überprüfen, ob eine Methode mit einem bestimmten Delegaten aufgerufen wurde, erzeugt "method argument length mismatch"

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)); 
    } 
} 

Ich vermute, einige hinter den Kulissen gibt es Magie mit Delegierten, die ich noch nicht verstehen, relativ neu in C#, aber was ist der richtige Weg dies zu testen?


Update: Als Referenz Ich bin mit Mono 2.6.7 auf MacOS 10.6.5 und Targeting .NET 3.5.


Aktualisiert wieder: beste Vermutung ist, dass dies ein Mono Fehler ist; Ich habe es als https://bugzilla.novell.com/show_bug.cgi?id=656918 abgelegt.

+0

Ich habe nur Ihren Code kopiert und der Test bestanden. Ich benutze xUnit, aber das wäre nicht wichtig. Verwenden Sie die neueste Version von Moq? –

+0

Ich benutze Moq 4.0.10827 - scheint immer noch die neueste Version zu sein. Vielleicht ist es ein Mono-Bug? Ich benutze Mono 2.6.7 und targetiere .NET 3.5, wenn das einen Unterschied machen könnte. Ich sehe keine NUnit-Klassen im Stack-Trace, also ist es wahrscheinlich nicht NUnit vs xUnit. –

+1

Ich habe gerade den Test erneut ausgeführt, der auf .NET 3.5 abzielte und es bestanden hat. An dieser Stelle würde ich sagen, dass es ein Problem mit Mono ist. –

Antwort

Verwandte Themen