У меня есть этот метод я пытаюсь издеваться:Как я могу сопоставить аргументы массива 2d с помощью Mockito?
public class Dog {
public String foo(String a, String[][] headers);
}
Я хотел бы вернуться bar
когда foo("hello", new String[][]{{"a", "b"}})
называется:
Dog dog = mock(Dog.class);
when(dog.foo("hello", new String[][]{{"a", "b"}})).thenReturn("bar");
Однако это не работает, потому что Mockito использует equals()
при совпадении массивов, и поскольку они не указывают на один и тот же объект, он не работает:
// prints null instead of bar
System.out.println(dog.foo("hello", new String[][]{{"a", "b"}}));
Обратите внимание на код, который не будет иметь доступ к объекту, используемому в качестве аргумента, который должен быть сопоставлен в #when
. Каковы некоторые способы обойти эту проблему?
Я считаю, что ваша проблема заключается в том, что массивы в вашей реализации не являются одним и тем же экземпляром. Попробуйте назначить массив переменной и использовать эту переменную в «когда», а также в вызове «dog.foo». – Nodebody
Да, это проблема, однако код, который тестируется, который вызовет dog.foo с этими параметрами, не будет иметь доступа к переменной массива. Он должен построить новый массив, который будет иметь одинаковые значения. – Popcorn