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

Използвам Mockito за моето тестване на модули и се натъкнах на проблем, при който имам колекция от хешове и искам да проверя дали параметрите са еквивалентни.

т.е. имам нещо подобно

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

// Do some stuff, omitted for brevity

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

Това е неуспешно, тъй като 'equals()' на byte[]'s прави сравнение на препратка (и това не е същата препратка).

Има ли нещо просто, което пропускам, за да сравня две колекции от байтове []? Има ли специален съпоставител, който трябва да използвам за сравнението? Обикновено бих използвал Arrays.equal(), но не знам как да кажа на Mockito да използва това за сравняване на елементите. Предложения?


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


Отговори (1)


Няма съвпадение на mockito с 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