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