Проверка равенства Collection‹byte[]› с Mockito?

Я использую Mockito для модульного тестирования и столкнулся с проблемой, когда у меня есть набор хэшей, и я хочу убедиться, что параметры эквивалентны.

то есть у меня есть что-то вроде

Collection< byte[] > blobs = new ArrayList< byte[] >();

// Do some stuff, omitted for brevity

verify( mockStore ).setWhatever( eq( blobs ) );

Это не удается, поскольку 'equals()' для byte[] сравнивает ссылку (и это не одна и та же ссылка).

Есть ли что-то простое, чего мне не хватает, чтобы сравнить две коллекции byte[]? Есть ли специальный сопоставитель, который мне нужно использовать для сравнения? Обычно я бы использовал Arrays.equal(), но я не знаю, как сказать Mockito использовать это для сравнения элементов. Предложения?


person Shawn D.    schedule 24.11.2011    source источник


Ответы (1)


Мокито-сопоставителя deepEquals не существует. Однако вы можете закодировать его в каком-нибудь тестовом помощнике, например:

public static Collection<byte[]> sameHashes(Collection<byte[]> hashes) {
    class CollectionOfHashesMatcher extends ArgumentMatcher<Collection<byte[]>> {
        public boolean matches(Collection<byte[] actualListOfHashes) { /* ... */ }        
        public void describeTo(Description description) { /* ... */ }        
    };
    return argThat(new CollectionOfHashesMatcher(hashes));
}

Что должно дать что-то вроде:

verify(mockStore).setWhatever(sameHashes(blobs));
person Brice    schedule 24.11.2011
comment
Работал как шарм. Спасибо. - person Shawn D.; 30.11.2011