Testuję pewną klasę. Ta klasa wewnętrznie tworzy instancję obiektu "GetMethod", która zostaje przekazana do obiektu "HttpClient", który zostaje wtryśnięty do testowanej klasy.Przechwyć argument w Mockito
Kpię z klasy "HttpClient", ale potrzebowałbym zmodyfikować zachowanie jednej metody z klasy "GetMethod". Gram z ArgumentCaptorem, ale wydaje mi się, że nie udało mi się uchwycić instancji obiektu w wywołaniu "kiedy".
Przykład:
HttpClient mockHttpClient = mock(HttpClient.class);
ArgumentCaptor<GetMethod> getMethod = ArgumentCaptor.forClass(GetMethod.class);
when(mockHttpClient.executeMethod(getMethod.capture())).thenReturn(HttpStatus.SC_OK);
when(getMethod.getValue().getResponseBodyAsStream()).thenReturn(new FileInputStream(source));
Response:
org.mockito.exceptions.base.MockitoException:
No argument value was captured!
You might have forgotten to use argument.capture() in verify()...
...or you used capture() in stubbing but stubbed method was not called.
Be aware that it is recommended to use capture() only with verify()
Pisałeś o tym, kiedy edytowałem swoją odpowiedź. Cóż, obaj rozwiązaliśmy to w ten sam sposób :) – amorfis
Tak, nie mogę znaleźć innego sposobu zrobienia tego za pomocą dostępnych narzędzi. Nasty hack :) ale kołysze, gdy działa! –