Всем привет,я фанат,В нашей повседневной работе нам часто необходимо сотрудничество коллег для выполнения определенных функций.,Поэтому мы часто сталкиваемся со сценариями, когда службы или различные модули внутри приложения зависят друг от друга. Например, следующая сцена,serviceA
в methodA()
зависимость от режима serviceB
в methodB()
метод возвращаетдействоватьрезультат。Итак, если мы хотим побаловать себяmethodA()
Как писать модульные тесты,Еще нужно дождаться других коллегmethodB()
Только после завершения разработки метода. Есть ли способ пропустить или смоделировать этот метод? B Что насчет вывода? Это подводит нас к нашему сегодняшнему герою. Mockito
,один Отлично Mock
Платформа тестирования.
Мы используем Mock
Технологии могут удержать развитие от стагнации,Mock
Роль технологии заключается в изоляции зависимостей между сервисами на этапе тестирования и самотестирования.,Позвольте разработчикам создавать интерфейсы, требующие внешних зависимостей, посредством моделирования в их собственных приложениях.,Это гарантирует, что на него не повлияет прогресс внешнего развития.。О чем мы будем говорить сегодняMockito
Просто отличный Mock
рамка.
Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produce clean verification errors.
Mockito
1 — очень полезная рамка для моделирования. Она позволяет использовать ее чисто и просто. API
Пишите красивые тесты。Mockito
Читабельность очень хорошая, вы не запутаетесь, а возникающие ошибки проверки также очень понятны.
Официальный адрес сайта:https://site.mockito.org/
Китайская документация:https://github.com/hehonghui/mockito-doc-zh#0
Впервые в инженерном деле pom
Чтобы добавить зависимости в файл, мы добавляем mockito
иjunit
зависимость.
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
Далее мы напишем один простой тест. пример,Здесь мы проходимmock
один List
Возражайте, сначала добавьте несколько элементов, а затем проверьте, соответствует ли добавленное взаимодействие нашим ожиданиям.
@Test
public void testVerify() throws Exception {
//создавать mock объект
List mockedList = mock(List.class);
mockedList.add("test1");
mockedList.add("test2");
mockedList.add("test2");
mockedList.clear();
//Проверяем, было ли оно выполнено один раз add("test1") действовать
verify(mockedList).add("test1");
//То же, что и выше, чтобы проверить, было ли оно выполнено один раз add("test1") действовать,Значение по умолчанию: time(1)
verify(mockedList, times(1)).add("test1");
//Проверяем, было ли оно выполнено 3 раза add("test2") действовать
//verify(mockedList, times(3)).add("test2");
verify(mockedList).clear();
}
После запуска приведенного выше тестового примера результат будет следующим: Тестовый пример пройден.
когда мы отпустимverify(mockedList, times(3)).add("test2");
Когда эта строка кода запускается, мы видим, что тестовый пример не пройден, и отображается сообщение об ошибке, которое мы ожидали выполнить. 3 раз, в результате получается, что только 2 Второсортныйadd("test2")
действовать.
Приведенный выше тестовый пример предназначен для проверки того, соответствует ли количество выполнений соответствующего метода ожиданиям. Помимо точного количества раз, существуют также самые, по крайней мере, никогда не ожидающие методы проверки, как показано ниже:
//Точное время
verify(mockedList, times(3)).add("test2");
//По меньшей мере 1 раз
verify(mockedList, atLeastOnce()).add("test2");
//По меньшей мере 2 Второсортный
verify(mockedList, atLeast(2)).add("test2");
//большинство 5 Второсортный
verify(mockedList, atMost(5)).add("test2");
Задайте параметры, задав значения или сложив их, как показано ниже, при выполнении get(0)
При работе мы проходим thenReturn()
метод возвращает hello
,при выполнении get(1)
действовать Когда мы выбрасываем исключение нулевого указателя,Результаты запуска показаны на рисунке ниже:
@Test
public void testWhen() throws Exception {
LinkedList mockedList = mock(LinkedList.class);
//Устанавливаем значение, часто называемое штабелированием
when(mockedList.get(0)).thenReturn("hello");
when(mockedList.get(1)).thenThrow(new NullPointerException());
System.out.println(mockedList.get(0));
//Это будет напечатано "null" потому что get(2) нет настроек
System.out.println(mockedList.get(2));
//Он будет брошен сюда exception
System.out.println(mockedList.get(1));
//Проверяем, выполнено ли оно get(0) действовать
verify(mockedList).get(0);
}
Вы можете увидеть это, когда мы позвоним get(0)
и get(1)
Консоль успешно выдала исключение, когда。Этот подход часто называютStubbing
,Помимо использования when...thenReturn
Помимо метода, существует еще одна форма, которую можно выразить. Код выглядит следующим образом:
@Test
public void testDoReturn() throws Exception {
Iterator mockedList = mock(Iterator.class);
doReturn("hello").when(mockedList).next();
Object next = mockedList.next();
System.out.println(next);
doReturn("world").when(mockedList).next();
Object next2 = mockedList.next();
System.out.println(next2);
//Вышеупомянутый процесс также можно записать следующим образом
doReturn("test1", "test2").when(mockedList).next();
Object next3 = mockedList.next();
System.out.println(next3);
Object next4 = mockedList.next();
System.out.println(next4);
}
Результаты работы следующие: вы также можете использовать doThrow()
Метод выдает исключение:
В повседневной разработке нам необходимо обеспечить своевременность методов или время, в течение которого должен выполняться определенный метод. В это время мы также можем использовать макеты, чтобы проверить, соответствуют ли наши методы требованиям. Код выглядит следующим образом:
@Test
public void testTimeout() throws Exception {
HttpService mock = mock(HttpService.class);
String url = "http://www.xxx.com";
mock.getRequest(url);
verify(mock, timeout(100)).getRequest(url);
//После таймаута проверяем getRequest(), используя собственный режим проверки
VerificationMode customVer = new VerificationMode() {
@Override
public void verify(VerificationData data) {
}
@Override
public VerificationMode description(String s) {
return null;
}
};
verify(mock, new Timeout(100, customVer)).getRequest(url);
}
Mockito Есть еще много API Можно использовать,Больше способов использовать,Вы можете обратиться к этому сайту。https://www.tutorialspoint.com/mockito/mockito_timeouts.htm
,Есть более подробное введение.