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

Проверка EasyMock

Метод EasyMock verify (), методы EasyMock verify с заглушкой, проверка неожиданных вызовов, проверка хорошего макета, Сбой ожидания при проверке java.lang.Ошибка утверждения

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

Метод EasyMock Verify используется для проверки того, что вызываются все методы с заглушкой и нет неожиданных вызовов для издевательского объекта.

Проверка EasyMock

Метод EasyMock verify() имеет тот же эффект, что и вызов проверка записи(объект) и проверка неожиданных вызовов(Объект) методов.

Давайте рассмотрим простой пример метода EasyMock verify ().

package com.journaldev.easymock;

import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.mock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.ArrayList;

import org.junit.jupiter.api.Test;

public class EasyMockVerifyExample {

	@Test
	public void test() {
		ArrayList mockList = mock(ArrayList.class);
		expect(mockList.add(10)).andReturn(true);
		expect(mockList.add(20)).andReturn(true);
		expect(mockList.size()).andReturn(2);
		expect(mockList.get(0)).andReturn(10);
		replay(mockList);

		mockList.add(10);
		mockList.add(20);
		assertTrue(mockList.get(0) == 10);
		assertEquals(mockList.size(), 2);

		verify(mockList);
	}
}

Обратите внимание, что все заглушенные методы вызываются после метода replay () .

Что, если мы не вызовем заглушенный метод?

Это вызовет ошибку утверждения. Например, если я прокомментирую макет List.add(10) оператор, о приведенной ниже трассировке стека исключений сообщит JUnit .

java.lang.AssertionError: 
  Expectation failure on verify:
    ArrayList.add(10 (int)): expected: 1, actual: 0
	at org.easymock.internal.MocksControl.verify(MocksControl.java:284)
	at org.easymock.EasyMock.verify(EasyMock.java:2041)
	at com.journaldev.easymock.EasyMockVerifyExample.test(EasyMockVerifyExample.java:31)

EasyMock проверяет неожиданные звонки с помощью хорошего макета

Если издевательский объект является хорошим макетом, то метод verify() не выдаст ошибку при неожиданных вызовах метода. Однако он выдаст ошибку, если не будут вызваны заглушенные вызовы.

Приведенный ниже фрагмент кода для теста будет окрашен в зеленый цвет, потому что издевательский объект-это хороший макет.

ArrayList mockList = mock(MockType.NICE, ArrayList.class);
replay(mockList);
mockList.add(10); //unexpected method call
verify(mockList);

Сложный пример проверки EasyMock()

Мы можем переместить метод EasyMock verify() в методы @After, чтобы убедиться, что вызывались все заглушенные методы.

package com.journaldev.easymock;

import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.mock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.ArrayList;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class EasyMockVerifyRealExample {

	ArrayList mockList;

	@BeforeEach
	public void setup() {
		mockList = mock(ArrayList.class);
	}

	@Test
	public void test() {
		expect(mockList.add(10)).andReturn(true);
		expect(mockList.get(0)).andReturn(10);
		replay(mockList);

		mockList.add(10);
		assertTrue(mockList.get(0) == 10);
	}

	@AfterEach
	public void teardown() {
		verify(mockList);
	}

}

Резюме

Метод EasyMock verify() используется для проверки того, что используются все методы с заглушкой и нет неожиданных вызовов. Поведение при неожиданных вызовах меняется для хороших макетных объектов, где это не вызывает никаких ошибок. Метод EasyMock verify() очень похож на метод Mockito verify ().