Как получить параметры метода имитируемого метода, который вызывается тестируемой функцией? - PullRequest
1 голос
/ 05 мая 2020
public class SearchServiceTest
{
    @InjectMocks
    SearchService searchService;

    @Mock
    Mapvalues mapvalues;

    @Before
    public void setUp() throws FileNotFoundException
    {
        MockitoAnnotations.initMocks(this);
        Map<String, Integer> map = new Hashmap<>();
        File fp = ResourceUtils.getFile("classpath:test.txt");
        Scanner sc = new Scanner(fp);
        while (sc.hasNextLine())
        {
            String line = sc.nextLine();
            map.put(line, 300);
        }

    }

    @Test
    public void testDoSomething()
    {
       searchService.doSomething();
       //so basically this doSomething() method calls the method mapvalues.getval(String key), 
       //but instead I want to perform map.get(key) when the method is called.
    }
}

Итак, метод doSomething () вызывает метод mapvalues.getval (String key), который возвращает целочисленное значение, но я хочу передать значение ключа map.get (key) при вызове метода. Как мне получить этот параметр?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Вы тестируете searchService.doSomething(); Я предполагаю, что тело этого метода содержит оператор mapvalues.getval("KEY-VALUE");

Перед выполнением тестового вызова в вашей настройке заглушите метод, который, как вы ожидаете, будет вызван

    when(mapvalues.getval(any())).then(new Answer<Integer>() {
        @Override
        public Integer answer(InvocationOnMock invocation) throws Throwable {
            return map.get(invocation.getArgument(0, String.class));
        }
    });

После тестового вызова вы хотите убедиться, что желаемый метод был вызван с ожидаемыми значениями параметров.

   verify(mapvalues).getval(eq("KEY-VALUE"));
0 голосов
/ 05 мая 2020
when(mapvalues.get(any())).thenAnswer((Answer<String>) invocation -> {
    String key = invocation.getArgument(0);
});
...