Автор оригинала: 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() {
ArrayList mockedList = 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() {
List list = 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")
List mockedList = 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, и обе платформы используют свободный стиль кодирования.