Пошук статичних операторів імпорту для конструкцій Mockito


80

Я намагаюся пробитися крізь цегляну стіну між мною та Мокіто. Я вирвав собі волосся, намагаючись отримати правильні статичні оператори імпорту для матеріалів Mockito. Можна подумати, хтось просто підкине таблицю, в якій буде сказано, що anyInt () походить від org.mockito.Matchers, а коли () походить від org.mockito.Mockito тощо), але це було б надто корисно для новачків, ні?

Такі речі, особливо в поєднанні з незліченною кількістю операторів імпорту, що закінчуються зірочками, не завжди дуже корисні:

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

Так, я знаю і намагався скористатися вікном Eclipse -> Налаштування-> Java -> Редактор-> Допомога вмісту -> Механізм Вибране . Це допомагає, але це не вражає цвях на голові.

Будемо вдячні за будь-які відповіді на це питання.

Велике спасибі, Рас


Вибачте, що вирвав спільноту: мій оригінальний пост також задав інше питання, але я виявив, що це щось не так з моїм кодом через відсутність дужок, тому я видалив цей біт.
Russ Bateman

Шукаєте шпаргалку? Ми, мабуть, можемо підбити одного? Що не вистачає на api? mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/…
Тоні Р

2
Отже, ви повинні розуміти, що я релігійно уникаю зірочки в операторах імпорту, тому що бачити подібні речі у верхній частині коду просто означає, що безперспективно знати, звідки походить символ, і, отже, жоден спосіб зрозуміти, що JAR включити у моєму проекті. Пошук Javadoc у браузері не надто хороший для пошуку символів. Так, шпаргалка була б дуже приємною, але як ми з колегою обговорювали зараз, це одна з проблем, яку, на вашу думку, спільнота Java вирішила б до цього часу. Дякую - дайте мені знати, якщо ви це зробите.
Russ Bateman

імпортувати статичний org.mockito.Mockito. *; допоміг мені успішно скомпілювати мій код.
ZhaoGang

Відповіді:


16

Проблема полягає в тому, що статичні імпорти з Hamcrest та Mockito мають схожі назви, але повертають збіги та реальні значення відповідно.

Одне навколо - просто скопіювати класи Hamcrest та / або Mockito та видалити / перейменувати статичні функції, щоб їх було легше запам’ятовувати та менше відображатись в автозавершенні. Це я зробив.

Крім того, використовуючи глузування, я намагаюся уникати assertThatна користь інших assertionsта verify, наприклад

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

замість

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

Якщо ви видалите класи зі свого Вибраного в Eclipse і введете довге ім’я, наприклад, org.hamcrest.Matchers.equalToі зробите CTRL + SHIFT + M на «Додати імпорт», тоді автозаповнення покаже лише збіги Hamcrest, а не будь-які збіги Mockito. І ви можете зробити це по-іншому, якщо ви не змішуєте матчі.


1
Так, ви забили одну з моїх скарг як новачка: я не впевнений, звідки береться інтерфейс (JUnit, макет фреймворка, Hamcrest тощо), я витрачаю більше часу на спроби скласти проект із JAR, ніж я насправді мав би це зробити (ніж я коли-небудь робив, коли знаходив інтерфейси C з бібліотек та файлів заголовків).
Russ Bateman

Можливо, ви станете красномовнішими щодо того, чому уникаєте стверджувати. Що: я ще недостатньо задумався над цим, але я зараз намагаюся вступити в написання тестів з макетами, і перевірка є новою для мене. Дякую.
Russ Bateman

Гаразд, у мене є інше рішення для вас. Сподіваюся, це допоможе!
Garrett Hall

105

Ось що я робив, щоб впоратися із ситуацією.

Я використовую глобальний імпорт для нового тестового класу.

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

Коли ви закінчите писати тест і вам потрібно здійснити комісію, вам просто потрібно CTRL + SHIFT + O, щоб впорядкувати пакети. Наприклад, у вас можуть просто залишитися:

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;

Це дозволяє кодувати, не застрягаючи, намагаючись знайти правильний пакет для імпорту.


1
Для користувачів Mac замість CTRL + SHIFT + O виконувати команду + shift + O
Майкл Ософський

У чому мінус постійного використання таких речей, як import static org.junit.Assert.*;у своїх тестових класах (а не заміни їх на ctrl+ shift+ Oнаприкінці)?
mkasberg

2
Оскільки я завжди повертаюся до Вашої відповіді за ці 3 рядки. Можливо, ви могли б оновити import static org.mockito.Matchers.*;до, import static org.mockito.ArgumentMatchers.*; оскільки Matchersпозначено як застаріле
timguy

1
@timguy Дякую - я подивлюсь! Важко повірити, що минуло 9 років ...
Тоні Р

4

Для є ()

import static org.hamcrest.CoreMatchers.*;

Для assertThat ()

import static org.junit.Assert.*;

Для коли () та перевірки ()

import static org.mockito.Mockito.*;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.