Saya menggunakan Mockito 3.1.0.

Saya mencoba mengejek metode saya dengan sintaks ini:

when(mockedObject.myMethod(any(HttpServletRequest.class)).thenReturn(1);

myMethod sederhananya:

public Integer myMethod(HttpServletRequest request) {
    return 0;
}

Dalam metode yang saya uji, itu hanya dipanggil oleh:

int r = myObject.myMethod(request);

Tapi saya mendapatkan:

org.mockito.exceptions.misusing.PotentialStubbingProblem: 
Strict stubbing argument mismatch. Please check:
 - this invocation of 'myMethod' method:
    mockedObject.myMethod(null);
    -> at somefile.java:160)
 - has following stubbing(s) with different arguments:
    1. mockedObject.myMethod(null);
      -> at somefileTest.java:68)
0
Izaya 25 Mei 2021, 15:51

1 menjawab

Jawaban Terbaik

Seperti yang dijelaskan di sini any(myClass) tidak berfungsi jika argumen yang diberikan adalah nol, hanya any() yang berfungsi seperti yang dijelaskan di sini. Dalam kasus saya, request adalah null sehingga any(HttpServletRequest.class) tidak dapat menangkapnya. Saya memperbaikinya dengan mengubah

when(mockedObject.myMethod(any(HttpServletRequest.class)).thenReturn(1);

Untuk ini jika Anda yakin itu akan menjadi nol

when(mockedObject.myMethod(null)).thenReturn(1);

Atau ini jika Anda ingin menangkap semua kasus

when(mockedObject.myMethod(any())).thenReturn(1);

Metode lain adalah dengan menggunakan ArgumentMatchers:

when(mockedObject.myMethod(ArgumentMatchers.<HttpServletRequest>any())).thenReturn(1);

Terima kasih @xerx593 atas penjelasannya.

0
Izaya 26 Mei 2021, 16:02