Mockito matcher i tablica prymitywów


226

W przypadku Mockito chcę verify()wywołać metodę z byte[]listy argumentów, ale nie znalazłem sposobu na napisanie tego.

 myMethod( byte[] )

Chcę tylko coś takiego anyByteArray(), jak to zrobić z Mockito?


Czy naprawdę nie obchodzi Cię, jaka jest zawartość tablicy bajtów? Widzę to bardzo często w testach jednostkowych, gdzie ludzie używają dopasowań anyX (), ponieważ są one wygodne, ale realistycznie prawie zawsze powinieneś dbać o to, co jest przekazywane. Jeśli nie używasz odpowiedzi, która faktycznie zużywa wartość, prawdopodobnie powinien pasować do rzeczywistego oczekiwanego argumentu.
Matunos,

@Matunos: To dyskusyjne. Korzystanie z dowolnych dopasowań może uprościć testy, a kolejna osoba, która spojrzy na test, nie będzie rozpraszana niepotrzebnie precyzyjnym dopasowaniem i może skupić się na rzeczywistym celu testu.
Malik Atalla,

@tbruelle: Należy pamiętać, że każda tablica w Javie jest obiektem. To pomoże ci na początku.
Tomasz Przybylski

Odpowiedzi:


424

spróbowałbym any(byte[].class)


34
Jeśli chcesz zweryfikować konkretny bajt [], możesz użyćAdditionalMatchers.aryEq(expectedArray)
John Oxley

5
Lub Matchers. <Byte []> any ().
jbyler


12

Wolałbym użyć Matchers.<byte[]>any(). To zadziałało dla mnie.


1
Ostrzeżenie dla wszystkich: Teraz jest przestarzałe, więc wybrałbym głosowaną odpowiedź Mockito.any (byte []. Class)
Chexpir

10

Zgadzam się z Mutanos i Alecio. Ponadto można sprawdzić jak najwięcej identycznych wywołań metod (weryfikacja kolejnych wywołań w kodzie produkcyjnym, kolejność weryfikacji nie ma znaczenia). Oto kod:

import static org.mockito.AdditionalMatchers.*;

    verify(mockObject).myMethod(aryEq(new byte[] { 0 }));
    verify(mockObject).myMethod(aryEq(new byte[] { 1, 2 }));


0

Możesz użyć Mockito.any (), gdy argumenty są również tablicami. Użyłem tego w ten sposób:

verify(myMock, times(0)).setContents(any(), any());

0

To, co dla mnie działa, było org.mockito.ArgumentMatchers.isA

na przykład:

isA(long[].class)

to działa dobrze.

różnica między sobą wynosi:

public static <T> T any(Class<T> type) {
    reportMatcher(new VarArgAware(type, "<any " + type.getCanonicalName() + ">"));
    return Primitives.defaultValue(type);
}

public static <T> T isA(Class<T> type) {
    reportMatcher(new InstanceOf(type));
    return Primitives.defaultValue(type);
}

-1

Zawsze możesz utworzyć niestandardowy Matcher za pomocą argThat

Mockito.verify(yourMockHere).methodCallToBeVerifiedOnYourMockHere(ArgumentMatchers.argThat(new ArgumentMatcher<Object>() {
    @Override
    public boolean matches(Object argument) {
        YourTypeHere[] yourArray = (YourTypeHere[]) argument;
        // Do whatever you like, here is an example:
        if (!yourArray[0].getStringValue().equals("first_arr_val")) {
            return false;
        }
        return true;
    }
}));

Pisanie niestandardowego elementu dopasowującego, gdy Mockito jest w stanie poradzić sobie z tym przypadkiem użycia, dodaje tylko dług techniczny.
linuxdan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.