Поиск статических утверждений импорта для конструкций Mockito
Я пытаюсь прорваться сквозь кирпичную стену между мной и Мокито. Я разорвал свои волосы, пытаясь получить правильные импортные статические заявления для материала Mockito. Вы могли бы подумать, что кто-то просто выбросит стол, говорящий, что anyInt() происходит от org.mockito.Matchers и когда() поступает из org.mockito.Mockito и т.д., Но это будет слишком полезно для новичков, нет?
Подобные вещи, особенно когда они смешиваются с множеством операторов импорта, заканчивающихся звездочками, не всегда очень полезны:
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
Да, я знаю и пытаюсь использовать окно Eclipse Window → Preferences- > Java → Editor- > Content Assist → Favorites. Это помогает, но это не касается гвоздя на голове.
Любые ответы на этот вопрос будут оценены.
Большое спасибо,
Russ
Ответы
Ответ 1
Проблема заключается в том, что статический импорт из Hamcrest и Mockito имеют похожие имена, но возвращают соответственно Matches и реальные значения.
Один рабочий процесс состоит в том, чтобы просто скопировать классы Hamcrest и/или Mockito и удалить/переименовать статические функции, чтобы их было легче запомнить и меньше отображалось в автозавершении. Это то, что я сделал.
Кроме того, при использовании mocks я стараюсь избегать 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. И вы можете сделать это по-другому, пока вы не смешиваете матчи.
Ответ 2
Вот что я делал, чтобы справиться с ситуацией.
Я использую глобальный импорт в новом тестовом классе.
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;
Это позволяет вам кодировать код без необходимости "застревать", пытаясь найти правильный пакет для импорта.
Ответ 3
For is()
import static org.hamcrest.CoreMatchers.*;
Для assertThat()
import static org.junit.Assert.*;
В случае, когда() и verify()
import static org.mockito.Mockito.*;