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

Аргументы захвата EasyMock

Аргументы захвата EasyMock, метод нового захвата EasyMock (), захват EasyMock(), захват, захват нескольких аргументов, захват GetValue(), список getValues ().

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

Иногда мы хотим заглушить поведение для любых входных аргументов, поэтому мы используем сопоставители аргументов . Если вы хотите знать аргументы при вызове этих методов-заглушек, мы должны использовать совпадения, которые фиксируют аргумент.

Аргументы захвата EasyMock

Для аргументов захвата EasyMock требуются следующие действия:

  • Создайте Захват экземпляр, используя EasyMock.newCapture() метод.
  • Используйте capture(Захват) argumentmatcher с ожидайте, что будет соответствовать любому аргументу, а также захватите его для последующего использования.
  • Если вы хотите захватить примитивные типы, существуют специальные методы, такие как captureit () , capture Boolean() и т.д.

Захват Одного Аргумента

Если мы захватим один аргумент, то сможем получить его значение из метода Capture.GetValue () . Давайте приведем краткий пример для захвата одного аргумента.

package com.journaldev.easymock;

import static org.easymock.EasyMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.ArrayList;

import org.easymock.Capture;
import org.easymock.CaptureType;
import org.junit.jupiter.api.Test;

import com.journaldev.utils.MathUtils;

public class EasyMockCaptureAgrumentExample {

	@Test
	public void test_single_call_arg_capture() {
		ArrayList mockList = mock(ArrayList.class);
		Capture captureSingleArgument = newCapture();
		expect(mockList.add(capture(captureSingleArgument))).andReturn(true);
		replay(mockList);

		assertTrue(mockList.add("Hello Pankaj"));
		
		System.out.println(captureSingleArgument.getValue()); //Hello Pankaj
		
		verify(mockList);
	}
}

Захват аргументов для нескольких вызовов

Если метод stubbed вызывается несколько раз, мы можем использовать getValues() для получения списка аргументов.

@Test
public void test_multiple_calls_args_catcher() {
	ArrayList mockList = mock(ArrayList.class);
	Capture captureArguments = newCapture(CaptureType.ALL);
	expect(mockList.add(captureInt(captureArguments))).andReturn(true).times(2);
	replay(mockList);

	assertTrue(mockList.add(10));
	assertTrue(mockList.add(20));
	
	System.out.println(captureArguments.getValues()); //[10, 20]
	
	verify(mockList);
}

Захват Нескольких Аргументов

Мы также можем захватить несколько методов аргументов. Мы можем использовать разные экземпляры захвата для разных типов аргументов или использовать один и тот же экземпляр.

@Test
public void test_multiple_args_catcher() {
	MathUtils mock = mock(MathUtils.class);
	Capture captureArguments = newCapture(CaptureType.ALL);

	expect(mock.add(captureInt(captureArguments), captureInt(captureArguments))).andReturn(10).times(2);
	replay(mock);

	assertEquals(mock.add(0,10), 10);
	assertEquals(mock.add(1, 9), 10);
	
	System.out.println(captureArguments.getValues()); //[0, 10, 1, 9]

	verify(mock);
}

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

Резюме

Захват аргументов EasyMock помогает нам отслеживать и записывать аргументы, используемые с помощью издевательских методов. Это может быть полезно при отладке, если наши тестовые примеры не работают по какому-либо конкретному аргументу.