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

Метод Mockito Имитация Пустоты

Метод Mockito Mock Void, метод Mockito doAnswer, метод Mockito doThrow, исключение для метода Mockito Mock Void, пример кода метода Mockito void.

Автор оригинала: Pankaj Kumar.

В большинстве случаев метод Mockito when() достаточно хорош, чтобы издеваться над поведением объекта. Но когда нам приходится издеваться над методом void, мы не можем использовать when() .

Метод Mockito Имитация Пустоты

Mockito предоставляет следующие методы, которые можно использовать для моделирования методов void.

  1. do Answer() : Мы можем использовать это для выполнения некоторых операций, когда вызывается метод издевательского объекта, возвращающий значение void.
  2. do Throw() : Мы можем использовать do Throw (), когда хотим заглушить метод void, который создает исключение.

Давайте создадим простой класс с методом void, который мы будем использовать в наших тестовых классах.

package com.journaldev;

public class Employee {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		if (name == null)
			throw new IllegalArgumentException("Employee Name can't be null");
		this.name = name;
	}

}

Пример метода Mockito mock void

Метод Mockito doAnswer() принимает Ответ в качестве аргумента. Это функциональный интерфейс , поэтому мы можем использовать лямбда-выражение для его реализации.

doAnswer((i) -> {
	System.out.println("Employee setName Argument = " + i.getArgument(0));
	assertTrue("Pankaj".equals(i.getArgument(0)));
	return null;
}).when(emp).setName(anyString());

Обратите внимание, что оператор return null требуется, так как мы издеваемся над методом void.

Метод Mockito имитация пустоты с исключением

Ниже фрагмент кода показывает, как использовать метод do Throw() для моделирования методов void с исключением.

doThrow(IllegalArgumentException.class).when(emp).setName(null);

Пример метода JUnit Mockito mock void

Вот полный пример в JUnit, где я использую Mockito, чтобы имитировать метод void.

package com.journaldev.mockito.voidmethod;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.jupiter.api.Test;

import com.journaldev.Employee;

class JUnitMockitoVoidMethod {

	@Test
	void test_mockito_void() {
		Employee emp = mock(Employee.class);

		doThrow(IllegalArgumentException.class).when(emp).setName(null);

		doAnswer((i) -> {
			System.out.println("Employee setName Argument = " + i.getArgument(0));
			assertTrue("Pankaj".equals(i.getArgument(0)));
			return null;
		}).when(emp).setName(anyString());

		when(emp.getName()).thenReturn("Pankaj");

		assertThrows(IllegalArgumentException.class, () -> emp.setName(null));

		emp.setName("Pankaj");
		assertEquals("Pankaj", emp.getName());
	}

}

Пример метода TestNG Mockito void

Поскольку аннотации JUnit 5 и TestNG настолько похожи, нам не нужно вносить какие-либо изменения в код в вышеприведенном классе, чтобы переключиться с JUnit 5 на TestNG.

Просто удалите инструкции импорта JUnit 5 и добавьте ниже импорт, чтобы изменить структуру тестирования с JUnit на TestNG.

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertThrows;
import static org.testng.Assert.assertTrue;

import org.testng.annotations.Test;