Рубрики
Без рубрики

Пример Mockito TestNG, пример аннотации Mockito @Mock, метод Mockito mock (), шпион Mockito, пример проверки с помощью TestNG, макет объекта Mockito с помощью TestNG.

Пример Mockito TestNG, пример аннотации Mockito @Mock, метод Mockito mock (), шпион Mockito, пример проверки с помощью TestNG, макет объекта Mockito с помощью TestNG.

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