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