Próbuję zaimplementować Mockito przetestować szczególną metodę ale .thenReturn (...) wydaje się być zawsze wraca do pustego obiektu, zamiast tego, co zamierzałem:Mockito - thenReturn zawsze zwraca null obiekt
CUT:
public class TestClassFacade {
// injected via Spring
private InterfaceBP bpService;
public void setBpService(InterfaceBP bpService) {
this.bpService = bpService;
}
public TestVO getTestData(String testString) throws Exception {
BPRequestVO bpRequestVO = new BPRequestVO();
bpRequestVO.setGroupNumber(testString) ;
bpRequestVO.setProductType("ALL") ;
bpRequestVO.setProfileType("Required - TEST") ;
IBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO); //PROBLEM
if (serviceResponse.getMessage().equalsIgnoreCase("BOB")) {
throw new Exception();
} else {
TestVO testVO = new TestVO();
}
return testVO;
}
}
Wiosna Konfiguracja:
<bean id="testClass" class="com.foo.TestClassFacade">
<property name="bpService" ref="bpService" />
</bean>
<bean id="bpService" class="class.cloud.BPService" />
Mockito test metoda: wyjście
@RunWith(MockitoJUnitRunner.class)
public class BaseTest {
@Mock BPService mockBPService;
@InjectMocks TestClassFacade mockTestClassFacade;
private String testString = null;
private BPRequestVO someBPRequestVO = new BPRequestVO();
private IBPServiceResponse invalidServiceResponse = new BPServiceResponse();
@Test (expected = Exception.class)
public void getBPData_bobStatusCode_shouldThrowException() throws Exception {
invalidServiceResponse.setMessage("BOB");
someBPRequestVO.setGroupNumber(null);
someBPRequestVO.setProductType("ALL");
someBPRequestVO.setProfileType("Required - TEST");
System.out.println("1: " + someBPRequestVO.getGroupNumber());
System.out.println("2: " + someBPRequestVO.getProductType());
System.out.println("3: " + someBPRequestVO.getProfileType());
System.out.println("4: " + someBPRequestVO.getEffectiveDate());
when(mockBPService.getProduct(someBPRequestVO)).thenReturn(invalidServiceResponse);
mockTestClassFacade.getTestData(testString);
verify(mockBPService).getProduct(someBPRequestVO);
}
}
System:
1: null
2: ALL
3: Required - TEST
4: null
Co tu się dzieje jest to, że gdy uruchamiam test przedmiotem serviceResponse jest zerowy na linii w CUT oznaczonego // PROBLEM powyżej. Pragnę, aby obiekt ten był wypełniony moim obiektem "invalidServiceResponse" z mojej metody testowej. Sądząc z wyników mojego pliku System.out.println wydaje się, że moje bpRequestVO pasuje do mojego someBPRequestVO w treści.
Czy ktoś może mi pokazać, czego tu brakuje?
Dziękujemy za poświęcony czas!
Najprawdopodobniej to nie pasuje do parametrów do getProduct które ustawiłeś w sobie kiedy (...) z tym, co jest przekazywane w rzeczywistej metodzie. Spróbuj użyć dopasowań, kiedy (service.getProduct (argThat (...)). thenReturn. – LeffeBrune
OP: musisz zaakceptować odpowiedź @ lewthora zamiast tego, myliłem się, nadpisanie '.equals()' wystarczy, nie potrzebujesz argumentu matchera – fge
Dzięki za kontynuację fge ... właśnie przetestowałem go z .equals() i wróciłem do tej strony do upewnij się, że czegoś nie zrozumiałem źle. Rzeczywiście znalazłem twój komentarz! Zmieniłem zaakceptowaną odpowiedź. Dzięki za szczerość. – risingTide