Statische Importanweisungen für Mockito-Konstrukte finden

Lesezeit: 5 Minuten

Benutzer-Avatar
Russ Batemann

Ich versuche, durch die Mauer zwischen mir und Mockito zu brechen. Ich habe mir die Haare ausgerissen, weil ich versucht habe, es richtig zu machen statisch importieren Aussagen für Mockito-Sachen. Man könnte meinen, jemand würde einfach einen Tisch hochwerfen, wenn er das sagt beliebigInt() kommt von org.mockito.Matchers und Wenn() kommt von org.mockito.Mockitousw., aber das wäre zu hilfreich für Neulinge, oder?

So etwas ist nicht immer sehr hilfreich, insbesondere wenn es mit unzähligen weiteren Importanweisungen gemischt wird, die mit Sternchen enden:

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

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

Alle Antworten auf diese Frage wären willkommen.

Vielen Dank Russ

  • Tut mir leid, die Community herumzureißen: In meinem ursprünglichen Beitrag wurde auch eine andere Frage gestellt, aber ich habe festgestellt, dass aufgrund einer fehlenden Klammer etwas mit meinem Code nicht stimmt, also habe ich dieses Bit entfernt.

    – Russ Batemann

    6. September 2011 um 16:04 Uhr


  • Suchen Sie nach einem Cheatsheet? Wir können wahrscheinlich einen zaubern? Was ist an der API mangelhaft? mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/…

    – Toni R

    6. September 2011 um 16:42 Uhr

  • Sie müssen also verstehen, dass ich das Sternchen in import-Anweisungen religiös vermeide, weil es einfach hoffnungslos ist, zu wissen, woher ein Symbol kommt, wenn man so etwas oben im Code sieht, und daher keine Möglichkeit, herauszufinden, welche JAR eingefügt werden soll in meinem Projekt. Das Durchsuchen von Javadoc im Browser ist nicht so gut, um Symbole zu finden. Ja, ein Spickzettel wäre wirklich nett, aber als ein Kollege und ich gerade darüber gesprochen haben, ist dies eines der Probleme, von denen Sie glauben, dass die Java-Community sie inzwischen gelöst hätte. Danke – lassen Sie mich wissen, wenn Sie eine tun.

    – Russ Batemann

    6. September 2011 um 17:41 Uhr


  • Statisches org.mockito.Mockito.* importieren; hat mir geholfen, meinen Code erfolgreich zu kompilieren.

    – ZhaoGang

    31. Oktober 2016 um 1:43 Uhr

Hier ist, was ich getan habe, 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 ihn übergeben müssen, drücken Sie einfach STRG+UMSCHALT+O, um die Pakete zu organisieren. Zum Beispiel können Sie nur mit verlassen werden:

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 wegcodieren, ohne beim Versuch, das richtige Paket zum Importieren zu finden, hängen zu bleiben.

  • Für Mac-Benutzer statt STRG+SHIFT+O Befehl + Umschalt + O

    – Michael Osofsky

    2. Dezember 2014 um 0:09 Uhr

  • Was ist der Nachteil bei der dauerhaften Verwendung von Dingen wie import static org.junit.Assert.*; in Ihren Testklassen (ersetzen Sie sie nicht durch ctrl+shift+O Am Ende)?

    – mkasberg

    22. Januar 2018 um 17:49 Uhr

  • Da ich immer wieder auf Ihre Antwort für diese 3 Zeilen zurückkomme. Vielleicht könntest du updaten import static org.mockito.Matchers.*; zu import static org.mockito.ArgumentMatchers.*; Weil Matchers ist als veraltet gekennzeichnet

    – timguy

    6. März 2020 um 9:22 Uhr


  • @timguy Danke – ich werde einen Blick darauf werfen! Kaum zu glauben, dass es schon 9 Jahre her sind…

    – Toni R

    6. März 2020 um 16:46 Uhr

Benutzer-Avatar
Garret Hall

Das Problem ist, dass statische Importe aus Hamcrest und Mockito haben ähnliche Namen, geben aber Matchers bzw. reelle Werte zurück.

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.

Außerdem versuche ich, Mocks zu vermeiden assertThat zugunsten anderer anderer assertions und verifyz.B

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

Anstatt von

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

Wenn Sie die Klassen aus Ihren Favoriten in Eclipse entfernen und den langen Namen eingeben, z org.hamcrest.Matchers.equalTo und drücken Sie STRG + UMSCHALT + M, um “Import hinzufügen” auszuführen. Die automatische Vervollständigung zeigt Ihnen nur Hamcrest-Matcher, keine Mockito-Matcher. Und Sie können dies auch andersherum tun, solange Sie keine Matcher mischen.

  • Ja, Sie haben eine meiner Beschwerden als Neuling auf den Punkt gebracht: 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 müssen (als ich es früher jemals getan habe, als ich C-Schnittstellen aus Bibliotheken und Header-Dateien gefunden habe).

    – Russ Batemann

    6. September 2011 um 17:49 Uhr

  • Sie werden vielleicht eloquenter darüber sprechen, warum Sie assertThat vermeiden: Ich habe noch nicht gründlich genug darüber nachgedacht, aber ich versuche gerade, Tests mit Mocks zu schreiben, und das Verifizieren ist neu für mich. Vielen Dank.

    – Russ Batemann

    6. September 2011 um 17:51 Uhr

  • Okay, ich habe eine andere Lösung für dich. Ich hoffe, das hilft!

    – Garrett Hall

    6. September 2011 um 18:08 Uhr

Denn ist ()

import static org.hamcrest.CoreMatchers.*;

Für assertThat()

import static org.junit.Assert.*;

Für when() und verify()

import static org.mockito.Mockito.*;

Meine Importe

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.Test;

Und es funktioniert

1228700cookie-checkStatische Importanweisungen für Mockito-Konstrukte finden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy