Автор оригинала: Pankaj Kumar.
В учебнике по Mockito мы использовали JUnit для запуска тестовых случаев. Фреймворк Mockito также можно комбинировать с другими фреймворками тестирования Java. В этом уроке мы интегрируем Mockito mocking framework с платформой тестирования TestNG.
Тестируем Mockito
Мы будем повторно использовать классы, созданные в учебнике Mockito, и писать для них тестовые примеры в процессе тестирования. Вы можете загрузить полный код из нашего репозитория GitHub , чтобы ознакомиться с этими классами. Чтобы дать краткое представление, у нас есть следующие занятия.
Добавьте сервис
интерфейс иAddServiceImpl
класс реализации.CalcService
– это класс службы, который зависит отДобавить службу
.
Наша цель-протестировать методы класса CalcService
, поэтому мы будем имитировать AddService
с помощью Mockito, а не создавать его экземпляр.
Пример TestNG Mockito mock()
Давайте рассмотрим тестовый класс TestNG, в котором мы будем издеваться Добавлять сервис
, используя Mockito.mock()
метод.
package com.journaldev.mockito.testng; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import org.mockito.Mockito; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.journaldev.AddService; import com.journaldev.CalcService; public class TestNGMockitoExample { @Test(dataProvider = "dp") public void test_mock_object(int i, int j) { System.out.println("**--- Test testCalc executed ---**"); AddService addService; CalcService calcService; addService = Mockito.mock(AddService.class); calcService = new CalcService(addService); int expected = i + j; when(addService.add(i, j)).thenReturn(expected); int actual = calcService.calc(i, j); assertEquals(expected, actual); } @DataProvider public Object[][] dp() { return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, }; } }
Вот вывод, когда приведенный выше тестовый класс TestNG выполняется из Eclipse.
Если вы хотите выполнить тестовые классы TestNG через командную строку maven, добавьте следующие зависимости в maven-surefire-плагин
.
org.apache.maven.surefire surefire-testng 2.22.0
Вы можете ознакомиться с полным pom.xml файловый код из нашего репозитория проектов на GitHub.
Пример аннотации TestNG Mockito @Mock
Мы также можем использовать аннотацию @Mock для вставки издевательских объектов в тесты TestNG, просто не забудьте вызвать MockitoAnnotations.initMocks(это)
в методе @BeforeMethod
, чтобы Mockito инициализировал издевательские объекты.
package com.journaldev.mockito.testng; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.journaldev.AddService; import com.journaldev.CalcService; public class TestNGMockAnnotationExample { CalcService calcService; @Mock private AddService addService; @BeforeMethod public void setup() { System.out.println("@BeforeMethod TestNGMockAnnotationExample"); MockitoAnnotations.initMocks(this); } @Test(dataProvider = "dp") public void test_mock_annotation(int i, int j) { System.out.println("**--- Test testCalc executed ---**"); calcService = new CalcService(addService); int expected = i + j; when(addService.add(i, j)).thenReturn(expected); int actual = calcService.calc(i, j); assertEquals(expected, actual); } @DataProvider public Object[][] dp() { return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, }; } }
Тестирование Макетного Класса Бетона
Мы можем смоделировать конкретный класс и указать поведение для конкретной операции. Давайте поиздеваемся над ArrayList и заглушим несколько его операций.
package com.journaldev.mockito.testng; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import java.util.ArrayList; import org.testng.annotations.Test; public class TestNGMockitoSingleElement { @SuppressWarnings("unchecked") @Test public void mock_concrete_class() { ArrayListmockedList = mock(ArrayList.class); when(mockedList.get(0)).thenReturn("first-element"); System.out.println(mockedList.get(0)); assertEquals("first-element", mockedList.get(0)); // "null" gets printed as get(1) is not stubbed System.out.println(mockedList.get(1)); } }
Пример шпиона TestNG Mockito
package com.journaldev.mockito.testng; import static org.testng.Assert.assertEquals; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Test; public class TestNGMockitoSpyExample { @Test public void test_mockito_spy() { Listlist = new ArrayList<>(); List listSpy = spy(list); listSpy.add("first-element"); System.out.println(listSpy.get(0)); assertEquals("first-element", listSpy.get(0)); when(listSpy.get(0)).thenReturn("second-element"); System.out.println(listSpy.get(0)); assertEquals("second-element", listSpy.get(0)); // call the real method on Spied object since it's not stubbed assertEquals(1, listSpy.size()); } }
Пример проверки Mockito TestNG()
package com.journaldev.mockito.testng; import static org.mockito.Mockito.verify; import java.util.List; import org.mockito.Mockito; import org.mockito.internal.verification.VerificationModeFactory; import org.testng.annotations.Test; public class TestNGMockitoVerify { @Test public void test_mockito_verify() { @SuppressWarnings("unchecked") ListmockedList = Mockito.mock(List.class); mockedList.add("first-element"); mockedList.add("second-element"); mockedList.add("third-element"); mockedList.add("third-element"); mockedList.clear(); verify(mockedList).add("first-element"); verify(mockedList).add("second-element"); verify(mockedList, VerificationModeFactory.times(2)).add("third-element"); verify(mockedList).clear(); } }
Резюме
Mockito-это фантастическая платформа для насмешек, и она легко интегрируется с платформой тестирования TestNG. Мы рассмотрели различные примеры макетов TestNG, и обе платформы используют свободный стиль кодирования.