Suchen statischer Importanweisungen für Mockito-Konstrukte

80

Ich versuche durch die Mauer zwischen mir und Mockito zu krachen. Ich habe mir die Haare ausgerissen, weil ich versucht habe, korrekte statische Importanweisungen für Mockito-Sachen zu erhalten. Sie würden denken, jemand würde einfach eine Tabelle hochwerfen und sagen, dass anyInt () von org.mockito.Matchers stammt und when () von org.mockito.Mockito usw. stammt, aber das wäre für Neulinge zu hilfreich, nein?

Diese Art von Dingen ist nicht immer sehr hilfreich, insbesondere wenn sie mit unzähligen weiteren Import-Anweisungen gemischt werden, die mit Sternchen enden:

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

Ja, ich kenne den Eclipse-Fenster -> Einstellungen -> Java -> Editor -> Inhaltsassistent -> Favoriten- Mechanismus und habe versucht, ihn zu verwenden . Es hilft, aber es trifft nicht den Nagel auf den Kopf.

Alle Antworten auf diese Frage wäre dankbar.

Vielen Dank, Russ

Russ Bateman
quelle
Es tut mir leid, die Community herumzureißen: Mein ursprünglicher Beitrag stellte auch eine andere Frage, aber ich stellte fest, dass aufgrund einer fehlenden Klammer etwas mit meinem Code nicht stimmte, und entfernte dieses Bit.
Russ Bateman
Suchen Sie ein Spickzettel? Können wir wahrscheinlich einen auspeitschen? Was ist an der API mangelhaft? mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/…
Tony R
2
Sie müssen also verstehen, dass ich das Sternchen in Importanweisungen religiös vermeide, weil es hoffnungslos ist, zu wissen, woher ein Symbol kommt, und daher nicht herauszufinden, welche JAR enthalten sein soll in meinem Projekt. Das Durchsuchen von Javadoc im Browser ist nicht gut, um Symbole zu finden. Ja, ein Spickzettel wäre wirklich schön, aber als Kollege und ich haben gerade darüber gesprochen, dass dies eines der Probleme ist, von denen Sie glauben, dass die Java-Community es inzwischen gelöst hätte. Danke - lass es mich wissen, wenn du eins machst.
Russ Bateman
statische org.mockito.Mockito importieren. *; hat mir geholfen, meinen Code erfolgreich zu kompilieren.
ZhaoGang

Antworten:

16

Das Problem ist, dass statische Importe aus Hamcrest und Mockito ähnliche Namen haben, aber Matcher bzw. reale Werte zurückgeben.

Eine Problemumgehung besteht darin, einfach die Hamcrest- und / oder Mockito-Klassen zu kopieren und die statischen Funktionen zu löschen / umzubenennen, damit sie leichter zu merken sind und weniger in der automatischen Vervollständigung angezeigt werden. Das ist, was ich tat.

Auch wenn ich Mocks benutze, versuche ich, assertThatandere zu bevorzugen assertionsund verifyz

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));

Anstatt von

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));

Wenn Sie die Klassen in Eclipse aus Ihren Favoriten entfernen und den langen Namen org.hamcrest.Matchers.equalToeingeben, z. B. STRG + UMSCHALT + M, um "Import hinzufügen" auszuführen, werden bei der automatischen Vervollständigung nur Hamcrest-Matcher angezeigt, keine Mockito-Matcher. Und Sie können dies auch anders machen, solange Sie keine Matcher mischen.

Garrett Hall
quelle
1
Ja, Sie haben eine meiner Beschwerden als Neuling verstanden: Ich bin mir nicht sicher, woher eine Schnittstelle stammt (JUnit, Mock Framework, Hamcrest usw.). Ich verbringe mehr Zeit damit, ein Projekt aus JARs zusammenzusetzen, als ich wirklich sollte müssen (als ich es jemals zuvor getan habe, um C-Schnittstellen aus Bibliotheken und Header-Dateien zu finden).
Russ Bateman
Sie werden vielleicht beredter darüber, warum Sie die Behauptung vermeiden. Das: Ich habe noch nicht genug darüber nachgedacht, aber ich versuche gerade, Tests mit Verspottungen zu schreiben, und die Verifizierungssache ist neu für mich. Vielen Dank.
Russ Bateman
Okay, ich habe eine andere Lösung für dich. Hoffentlich hilft das!
Garrett Hall
105

Folgendes habe ich getan, um mit der Situation fertig zu werden.

Ich verwende globale Importe für eine neue Testklasse.

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;

Wenn Sie mit dem Schreiben Ihres Tests fertig sind und ein Commit durchführen müssen, drücken Sie einfach STRG + UMSCHALT + O, um die Pakete zu organisieren. Zum Beispiel können Sie nur noch übrig haben:

import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;

Auf diese Weise können Sie Code wegcodieren, ohne beim Versuch, das richtige zu importierende Paket zu finden, hängen zu bleiben.

Tony R.
quelle
1
Für Mac-Benutzer anstelle von STRG + UMSCHALT + O Befehl + Umschalt + O
Michael Osofsky
Was ist der Nachteil, wenn Sie Dinge wie import static org.junit.Assert.*;in Ihren Testklassen dauerhaft verwenden (ohne sie am Ende durch ctrl+ shift+ Ozu ersetzen )?
Mkasberg
2
Da komme ich immer wieder auf Ihre Antwort für diese 3 Zeilen zurück. Vielleicht könnten Sie auf aktualisieren import static org.mockito.Matchers.*;, import static org.mockito.ArgumentMatchers.*; weil Matcherses als veraltet markiert ist
timguy
1
@ Timguy Danke - ich werde einen Blick darauf werfen! Kaum zu glauben, dass 9 Jahre
Tony R
4

Denn ist ()

import static org.hamcrest.CoreMatchers.*;

Für assertThat ()

import static org.junit.Assert.*;

Für wann () und verifiziere ()

import static org.mockito.Mockito.*;
ethemsulan
quelle