600 Stimmen

Kann Mockito Argumente einer mehrfach aufgerufenen Methode erfassen?

Ich habe eine Methode, die zweimal aufgerufen wird, und ich möchte das Argument des zweiten Methodenaufrufs erfassen.

Ich habe Folgendes ausprobiert:

ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class);
ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class);
verify(mockBar).doSomething(firstFooCaptor.capture());
verify(mockBar).doSomething(secondFooCaptor.capture());
// then do some assertions on secondFooCaptor.getValue()

Aber ich bekomme eine TooManyActualInvocations Ausnahme, da Mockito der Meinung ist, dass doSomething sollte nur einmal aufgerufen werden.

Wie kann ich das Argument des zweiten Aufrufs von doSomething ?

6voto

fl0w Punkte 2940

Zuallererst: Sie sollten mockito static immer importieren, so wird der Code viel lesbarer (und intuitiver) - die folgenden Code-Beispiele erfordern dies, um zu funktionieren:

import static org.mockito.Mockito.*;

In der Methode verify() können Sie den ArgumentCaptor übergeben, um die Ausführung im Test zu gewährleisten, und den ArgumentCaptor, um die Argumente auszuwerten:

ArgumentCaptor<MyExampleClass> argument = ArgumentCaptor.forClass(MyExampleClass.class);
verify(yourmock, atleast(2)).myMethod(argument.capture());

List<MyExampleClass> passedArguments = argument.getAllValues();

for (MyExampleClass data : passedArguments){
    //assertSometing ...
    System.out.println(data.getFoo());
}

Die Liste aller übergebenen Argumente während Ihres Tests ist über die Methode argument.getAllValues() zugänglich.

Der Wert des einzelnen (zuletzt aufgerufenen) Arguments ist über argument.getValue() für weitere Manipulationen / Überprüfungen oder was auch immer Sie tun möchten, zugänglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X