2010-12-16 8 views
2

Ich versuche, einen erwarteten Aufruf für eine geschützte Methode einzurichten. Die Methoden Signatur sieht wie folgt aus:Argument eines List-Typs für eine geschützte Methode in Moq ignorieren

protected SqlDataReader MethodName(string Name, List<SqlParameter> paramList, SqlConnection con) 

ich als Einrichtung so weit gekommen sind, die Erwartung, wie folgt, aber ich erhalte eine Fehlermeldung, wenn die Durchführung des Tests:

mock.Protected() 
    .Setup<SqlDataReader>("MethodName", "SomeString", ItExpr.IsAny<List<SqlParameter>>(), ItExpr.IsNull<SqlConnection>()) 
    .Returns(dataReader); 

Der Fehler, den ich bekommen ist :

Test method GlobalTests.DBAdapterSystemDataTest.GetDentalWingsProstheticTypeMappings threw exception: 
System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: mock => mock.ExecuteReaderStoredProcedure("GetDentalWingsProstheticTypeMappings", It.IsAny<List`1>(), It.Is<SqlConnection>(v => Object.Equals((Object)v, (Object)null))) 

Hat jemand eine Idee, wie ich die Erwartung aufstellen kann, damit es funktioniert? Mir sind keine Argumentwerte wichtig, ich möchte nur bestätigen, dass die Methode mindestens einmal aufgerufen wurde.

Antwort

1

Die Fehlermeldung bedeutet, dass Sie das Schlüsselwort virtual zu Ihrer MethodName Methode hinzufügen müssen, damit Moq es in den Tests überschreiben kann.

+0

Ja, das hat den Trick gemacht. Ich bin mir nicht so sicher, ob ich alle Methoden, die ich zum Nachmachen brauche, so virtuell mache, aber ich werde sehen, wie es mit Moq geht. –

+0

@Anne: Ja, es fühlt sich auch ein bisschen falsch an! –