2017-07-21 4 views
0

Ich versuche, einen Testfall auszuführen, der die Daten in DB aktualisiert. Dies ist mein Quellcode der Testmethode.jmockit Überprüfungen blockieren werfen Fehlender Aufruf von 1 zu methodName

@Tested // This is class-level scope as I have different test methods. 
FirstLevelClass firstLevelClass; 

@Test 
public void testUpdateDB(@Mocked SecondLevelClass secondLevelClass) throws Exception { 

     // Updated method by passing an argument. 
     firstLevelClass.updateDatabaseThroughSecondLevelClass(info); 

     new Verifications() {{ 
      SecondLevelClass.updateDB(creds, data); 
      times =1; 
     }}; 

Hier ist meine Absicht, die erwarteten Aufrufe zu verspotten Methoden zu verifizieren [die in den Erwartungen aufgezeichnet]. Der Überprüfungsblock gibt jedoch die folgende Ausnahmebedingungsnachricht aus. Wenn ich mal = 1 entferne, dann wird der Testfall Erfolg. Das ist nicht mein Wunschergebnis. Kann mir bitte jemand vorschlagen, was in meinem Testfall falsch sein könnte.

mockit.internal.MissingInvocation: Fehlt 1 Aufruf auf: SecondLevelClass # UPDATEDB (creds, Daten) mit Argumenten: creds, Daten

Verursacht durch: Fehlende Anrufungen

Aktualisiert Frage:

Es gibt ein Argument zu updateDatabaseThroughSecondLevelClass(info), von diesem Argument, das wir bilden Kredit-Referenz in SecondLevelClass.

Credentials creds = info.getCredentials(); 

Aber in Prüfungen blockieren [, die Teil FirstLevelClass ist] haben wir lokal Testobjekt erstellt.

Credentials creds = getCredsTestObject(); 

Dies ist der Grund, warum es über Missing invocations beschwerte. Denn beide sind zwei verschiedene Referenzen in zwei Klassen. Kann mir bitte jemand vorschlagen, wie man mit diesem Fall umgeht.

Dank Im Voraus.

+0

Wo tun 'creds' und' data' kommt aus? Ich denke, sie sind nicht die gleichen Werte, die tatsächlich von 'updateDatabaseThroughSecondLevelClass' an' updateDB' übergeben werden, so dass Sie den "fehlenden Aufruf" erhalten. BTW, neuere Versionen von JMockit haben keine 'NonStrictExpectations' Klasse mehr; Außerdem hat es keinen Sinn, diese Erwartung zu protokollieren, wenn sie am Ende des Tests verifiziert wird (sie ist redundant). Außerdem erzeugt '@ Tested' selbst eine Instanz, die nicht explizit ausgeführt werden muss. Nehmen Sie sich ein paar Minuten Zeit, um die Dokumentation zu lesen, es gibt viele Beispiele. –

+0

Rogerio, bitte lesen Sie meine aktualisierte Frage und schlagen Sie bitte eine Möglichkeit vor, diesen Fall zu behandeln. – Honey

+0

Der Frage fehlen noch wesentliche Informationen: Wie werden 'info',' creds' und 'data' erstellt, bevor sie im Test verwendet werden? Es würde auch helfen, wenn Code für 'FirstLevelClass' angezeigt würde. –

Antwort

0

Es ist ein bekanntes Problem bei der Integration zwischen TestNG und JMockit: https://github.com/jmockit/jmockit1/issues/337

+0

Hallo Juhir, ich habe die gleichen Konzepte für andere Klassen benutzt, es hat funktioniert. In dieser Klasse stehe nur ein Problem. – Honey

+0

Beim Debuggen, wenn der Ablauf zu Zeiten = 1 kommt, wird die Ausnahme ausgelöst. Konnte nicht finden, was genau der Grund für dieses Problem ist. – Honey

+0

Das Problem hat nichts mit TestNG zu tun. Anscheinend (der getestete Code wurde nicht gezeigt ...) sind die Argumente, mit denen 'updateDB' aufgerufen wird, einfach nicht die, die in den Erwartungen verwendet werden. –

Verwandte Themen