GoogleMock: wie zu erwarten genau einen Anruf mit einem bestimmten argument, und siehe Diagnose auf Ausfall?
Vielleicht eine finesse Frage, mein problem ist, dass wenn ich Schreibe:
EXPECT_CALL(mock, handleMessage(_)).Times(0); //expectation #1
EXPECT_CALL(mock, handleMessage(Pointee(IsLike(aSpecificMessage)))); //expectation #2
... und Methode handleMessage
wird einmal aufgerufen, aber mit einem anderen argument (nicht aSpecificMessage
), dann ist der Fehler sieht wie folgt aus:
Mock function called more times than expected - returning default value.
Function call: handleMessage(0x8b5378)
Returns: false
Expected: to be never called
Actual: called once - over-saturated and active
Google Mock drucken nicht die Diagnose, warum das argument nicht entsprechen, das Prädikat in Erwartung #2.
Dies ist vermutlich, weil die Erwartung #1 ist das erste scheitern (?).
Wenn ich das weglasse Erwartung #1, dann wird der Fehler verbose, entlang der Linien von:
Google Mock tried the following 1 expectation, but it didn't match:
../../test/Test.cpp:143: EXPECT_CALL(mock, handleMessage(Pointee(IsLike(aSpecificMessage))))...
Expected arg #0: points to a value that <....>
Actual: 0xfeaf18, which points to <.....>
Ich bin mit einem benutzerdefinierten Matcher IsLike
und ich ging durch das Problem der Erzeugung von sehr explizite mismatch Gründen möchte ich Sie gedruckt werden. Ich würde auch nicht aufgeben wollen, Erwartung #1 da geht das in einem "Standard" - Abschnitt und standardmäßig will ich keine Anrufe an, die spotten über den rest des tests.
InformationsquelleAutor haelix | 2014-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie Sie verwenden sollten,die
StrictMock
template-modifier. Lassen Sie uns dieses einfach Klasse und mock:Beginnen wir mit einem grundlegenden test, übungen, Methode:
Ausgabe:
Das ist eine der alternativen, die Sie bereits angesehen, aber Sie wollen es nicht, weil Sie noch andere tests, die don ' T haben keine bestimmten Erwartungen darüber, ob die Funktion aufgerufen wird, und Sie möchten, dass diese tests fehlschlagen, wenn die Funktion aufgerufen wird, sowieso. Als Erinnerung, mal sehen, was passiert, wenn wir versuchen, einen solchen test:
Ausgabe:
Erhalten wir eine Warnung, aber der test noch geht. Das ist nicht gut für Sie. Lassen Sie uns sehen, welche Wirkung
StrictMock
hat:Ausgabe:
Hatten wir nicht explizit sagen, dass wir nicht wollen, dass die Funktion, die aufgerufen werden, aber wenn die Funktion aufgerufen wird, wird sowieso der test korrekt ausfällt. Genau das, was Sie wollte.
Schließlich, schauen wir uns an, was passiert mit
StrictMock
in dem Fall, wo es sind explizite Erwartungen für die Funktion argument:Ausgabe:
Diagnostik zeigen den Grund, warum das argument nicht übereinstimmen, genau wie das original
basic_one_expectation
test oben gezeigt.InformationsquelleAutor Rob Kennedy