"Kurzschluss" void-Methoden mit Moq?

mein team die Entscheidung getroffen hat, vor kurzem zu verwenden Moq wie unsere mocking framework, das für seine enorme Flexibilität und die sehr lesbare syntax. Da wir neu sind, ich bin stolpern auf, was scheint zu sein, einfach Fragen-suchen (hier, Google, etc.) viele Diskussionen auf anderen Nuancen Moq, aber nicht unbedingt das, was ich bin nach, und die wenigen scheinbar Verwandte Fragen haben sich in Ablenkungsmanöver.

Testen wir eine Klasse, die hat eine externe Abhängigkeit (Amazon SimpleDb, um genau zu sein), aber wollen nicht, dass unsere tests gebunden, um eine live-Verbindung aus. Eine Besondere Methode:

  • Gilt einige "business" - Logik
  • Gegebenenfalls startet einen Aufruf zu SDB über einen Anbieter, den wir gebaut haben, nennen wir es SaveItem()

Möchte ich unit test dies, so dass wir das setup der Kontext erforderlich und sicherzustellen, dass SaveItem() aufgerufen wurde, aber in einer Weise, die SaveItem() ist wirklich nicht aufgerufen wird (weil A) Sie den Anbieter, um die SDB ist ein Nachbau, der nicht vollständig hydratisiert und wird wahrscheinlich Bombe und B) möchte ich nicht haben zu zahlen für diese Transaktion Hunderte und Tausende Male).

Umgang mit Methoden, die einen Wert zurückgegeben, das war trivial.

mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");

In dem Fall, dass skizziere ich oben aber, mein " SaveItem() " - Methode ist void, und daher die option zur Verwendung von Moq ist Returns() Methode ist nicht verfügbar. Und während ich setup einen Rückruf zu überprüfen SaveItem() wird aufgerufen, ich kann aber nicht scheinen, um es zu bekommen, nicht wirklich etwas tun.

Naiv-hoffnungsvoll, ich dachte, die folgenden funktionieren würde, aber es erscheint immer noch die Methode aufrufen:

mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));

So, die Millionen-dollar-Frage: Was ist die Moq von der folgenden, fiktiven code?

mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();
  • Bearbeitet werden, um die situation zu klären, der test ist für eine "business" - Klasse im Umlauf, nicht für die eigentlichen SimpleDB Umsetzung. Die SimpleDB ist die Umsetzung getestet anderswo, hier ist es, was ich spöttisch.
InformationsquelleAutor bakasan | 2009-07-29
Schreibe einen Kommentar