Соответствие массива объектов с помощью Mockito

Я пытаюсь настроить макет для метода, который принимает массив объектов Request:

client.batchCall(Request[])

Я пробовал эти два варианта:

when(clientMock.batchCall(any(Request[].class))).thenReturn(result);
...
verify(clientMock).batchCall(any(Request[].class));

и

when(clientMock.batchCall((Request[])anyObject())).thenReturn(result);
...
verify(clientMock).batchCall((Request[])anyObject());

Но я могу сказать, что mocks не вызывается.

Они оба приводят к следующей ошибке:

Argument(s) are different! Wanted:
clientMock.batchCall(
    <any>
);
-> at com.my.pkg.MyUnitTest.call_test(MyUnitTest.java:95)
Actual invocation has different arguments:
clientMock.batchCall(
    {Request id:123},
    {Request id:456}
);

Почему совпадение не соответствует массиву? Есть ли специальный помощник, который мне нужно использовать для сопоставления массива объектов? Самое близкое, что я могу найти, это AddMartches.aryEq(), но для этого требуется указать точное содержимое массива, чего я бы не хотел делать.

Ответ 1

Итак, я быстро поставил что-то вместе, чтобы узнать, могу ли я найти вашу проблему, и не может ниже мой пример кода использовать любой (класс), и он работал. Так что мы чего-то не видим.

Тестовая версия

@RunWith(MockitoJUnitRunner.class)
public class ClientTest
{
    @Test
    public void test()
    {
        Client client = Mockito.mock(Client.class);

        Mockito.when(client.batchCall(Mockito.any(Request[].class))).thenReturn("");

        Request[] requests = {
            new Request(), new Request()};

        Assert.assertEquals("", client.batchCall(requests));
        Mockito.verify(client, Mockito.times(1)).batchCall(Mockito.any(Request[].class));
    }
}

класс клиента

public class Client
{
    public String batchCall(Request[] args)
    {
        return "";
    }
}

Класс запроса

public class Request
{

}

Ответ 2

Некропостинг, но проверьте, называется ли метод, который вы вызываете, как batchCall(Request[] requests) или batchCall(Request... requests).

Если это последний, попробуйте when(clientMock.batchCall(Mockito.anyVararg())).