2011-01-07 5 views
0

Ich setze eine Erwartung auf eine Methode, die ein Objekt als Parameter hat. Dieses Objekt wird innerhalb der aufgerufenen Funktionalität erstellt. Wenn ich dies verspotte, erhalte ich die Fehlermeldung "Expected # 1 Actual # 0"ASP.Net MVC - Rhino Mocks - Erwartete Methodenaufrufparameter

Wie kann ich das beheben?

Code:

Kundentestobject = new Kunde(); Expect.Call (sampleRepository.Find (testObject)). Zurück (True);

Ich vermute, dass die Schaffung eines neuen Objekts diese Erwartung scheitern lässt.

Bitte helfen.

Antwort

1

Verwenden Sie die „IgnoreArguments“ Methode:

Customer testObject = new Customer(); Expect.Call(sampleRepository.Find(testObject)).IgnoreArguments().Return(True); 

Diese Rhino.Mocks sagt nur einen Anruf erwarten, auf „Suchen“ und Sie kümmern sich nicht, was die Parameter sind.

+0

Dank Patrick. Das hat gut funktioniert. Aber vom Standpunkt der Prüfung aus können wir davon ausgehen, dass Parameter erfolgreich empfangen werden. – Thanigainathan

+0

Sie haben diesen Parameter angegeben, der an sampleRepository übergeben wird. Find() wird intern innerhalb der von Ihnen aufgerufenen Methode erstellt. Dies bedeutet, dass es sich um ein privates Implementierungsdetail handelt und nicht um etwas, das Sie testen sollten. Es wird dazu führen, dass Ihre Implementierung in Ihre Tests eindringt. Wenn Sie also die Implementierung ändern, werden Sie Ihre Komponententests durchbrechen. – PatrickSteele

+0

Wenn Sie die an sampleRepository.Find() gesendeten Argumente wirklich überprüfen müssen, können Sie die Methode "GetArgumentsForCallsMadeOn" in Ihrem Beispielrepository-Mock verwenden. Es wird ein Array von Arrays zurückgegeben. Das erste Element [0] ist ein Array von Parametern, das beim ersten Aufruf der Methode aufgerufen wird, Element [1] ist ein Array von Parametern, das beim zweiten Aufruf der Methode aufgerufen wird, usw. – PatrickSteele

1

Zusätzlich zu Patricks Antwort können Sie Constraints() verwenden, um Eigenschaften des Objekts zu überprüfen, ohne die Objektinstanz selbst überprüfen zu müssen. Jedes Argument zu Constraints ist die Beschränkung für das eigentliche Argument an dieser Position (Sie && oder || zu vielen Einschränkungen nutzen können, sie zu kombinieren):

Customer testObject = new Customer(); 

Expect.Call(sampleRepository.Find(testObject)) 
    .Constraints(
     Is.NotNull() && Property.Value("Nickname", "SnakeEyes") 
    ) 
    .Return(True); 
+0

Danke Richard für diese nützliche Info. – Thanigainathan