Mockito eşleştirici ve ilkel dizi


227

Mockito verify()ile byte[], argüman listesinde bir yöntem çağrısı yapmak istiyorum , ancak bunu nasıl yazacağımı bulamadım.

 myMethod( byte[] )

Sadece gibi bir şey istiyorum anyByteArray() , bunu Mockito ile nasıl yapabilirim?


Bayt dizisinin içeriğinin ne olduğunu gerçekten umursamıyor musunuz? Bunu, insanların uygun oldukları için anyX () eşleştiricileri kullandıkları birim testinde çok şey görüyorum, ancak gerçekçi olarak neredeyse her zaman neyin içinden geçtiğini önemsemelisiniz. Aslında değeri tüketen bir Cevap kullanmıyorsanız, muhtemelen beklenen bir argümanla eşleşmelidir.
Matunos

@Matunos: Bu tartışmalı. Herhangi bir eşleştiriciyi kullanmak testleri basitleştirebilir ve teste bakan bir sonraki kişi gereksiz yere hassas eşleştirme ile dikkatini dağıtmaz ve testin gerçek amacına odaklanabilir.
Malik Atalla

@tbruelle: Lütfen Java'daki her dizinin bir nesne olduğunu unutmayın. Bu başlangıçta size yardımcı olacaktır.
Tomasz Przybylski

Yanıtlar:


426

Denerdim any(byte[].class)


34
Belirli bir baytı doğrulamak istiyorsanız [] kullanabilirsinizAdditionalMatchers.aryEq(expectedArray)
John Oxley

5
Veya Eşleştiriciler. <Bayt []> herhangi bir ().
jbyler


12

Kullanmayı tercih ederim Matchers.<byte[]>any(). Bu benim için çalıştı.


1
Herkes için uyarı: Şimdi kullanımdan kaldırıldı, bu yüzden oylanan cevap için gideceğim Mockito.any (byte []. Class)
Chexpir

10

Mutanos ve Alecio'ya katılıyorum. Ayrıca, mümkün olduğunca çok sayıda özdeş yöntem çağrısı kontrol edilebilir (üretim kodundaki müteakip çağrıları doğrulamak, doğrulamanın sırası önemli değildir). İşte kod:

import static org.mockito.AdditionalMatchers.*;

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


0

Argümanlar da dizilerken Mockito.any () öğesini kullanabilirsiniz. Ben böyle kullandım:

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

0

Benim için işe yarayan org.mockito.ArgumentMatchers.isA

Örneğin:

isA(long[].class)

iyi çalışıyor.

birbirlerinin uygulama farkı:

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

Her zaman kullanarak özel bir Eşleştirici oluşturabilirsiniz 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;
    }
}));

Özel bir eşleştirici yazmak, Mockito bu kullanım durumunu ele alabildiğinde sadece teknik borç ekliyor.
linuxdan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.