it-swarm.com.de

Kann Mockito eine Methode ohne Rücksicht auf das Argument stutzen?

Ich versuche, einen alten Code mit Mockito zu testen.

Ich möchte einen FooDao erstellen, der in der Produktion wie folgt verwendet wird:

foo = fooDao.getBar(new Bazoo());

Ich kann schreiben:

when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);

Das offensichtliche Problem ist jedoch, dass getBar() nie mit demselben Bazoo -Objekt aufgerufen wird, für das ich die Methode erstellt habe. (Verfluche diesen new Operator!)

Ich würde es lieben, wenn ich die Methode auf eine Art und Weise stoppen könnte, dass sie myFoo zurückgibt, unabhängig vom Argument. Andernfalls höre ich mir andere Lösungsvorschläge an, aber ich möchte wirklich vermeiden, den Produktionscode zu ändern, bis eine angemessene Testabdeckung vorliegt.

274
Eric Wilson
when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);

oder (um nulls zu vermeiden):

when(
  fooDao.getBar(
    (Bazoo)notNull()
  )
).thenReturn(myFoo);

Vergessen Sie nicht, Matcher zu importieren (viele andere sind verfügbar):

Für Mockito 2.1.0 und neuer:

import static org.mockito.ArgumentMatchers.*;

Für ältere Versionen:

import static org.mockito.Matchers.*;
417

Verwenden Sie wie folgt:

when(
  fooDao.getBar(
    Matchers.<Bazoo>any()
  )
).thenReturn(myFoo);

Bevor Sie Mockito.Matchers Importieren müssen

15
user3975308

http://site.mockito.org/mockito/docs/1.10.19/org/mockito/Matchers.html

anyObject sollte Ihren Anforderungen entsprechen.

Sie können auch jederzeit in Betracht ziehen, hashCode und equals für die Bazoo-Klasse zu implementieren. Dadurch würde Ihr Codebeispiel so funktionieren, wie Sie es möchten.

13
Buhb