Я использую удаленный API в моем проекте Spring MVC, используя RestTemplate.Один клиент для аутентификации называется LoginApiClient
, и я должен использовать это для всех остальных клиентов.
Это мой клиент для отдыха, который использует LoginApiClient
и использует QrCode Api.
@Service
public class QrKeyApiClient implements QrKeyApiClientBase {
private RestTemplate restTemplate;
@Autowired
private LoginApiClientBase loginApiClient;
public QrKeyApiClient(RestTemplateBuilder builder) {
restTemplate = builder.build();
restTemplate.setErrorHandler(new ErrorHandler());
}
//Other implementation details
}
И это LoginApiClient
@Service
public class LoginApiClient implements LoginApiClientBase {
private RestTemplate restTemplate;
public LoginApiClient(RestTemplateBuilder builder) {
restTemplate = builder.build();
restTemplate.setErrorHandler(new ErrorHandler());
}
//Other implementation details
}
Мой класс тестового модуля дляQrKeyApiClient
, как показано ниже.
@RunWith(SpringRunner.class)
@RestClientTest({QrKeyApiClient.class})
@Category(IUnitTest.class)
public class QrKeyApiClientTest {
@Value("${getQrCodeUrl}")
private String getQrCodeUrl;
@Mock
LoginApiClient loginApiClient;
@Autowired
private MockRestServiceServer server;
@InjectMocks
private QrKeyApiClient client;
@Test
public void getQrCodeAsImage_makesTrueCallToApi() throws Exception {
ResponseEntity<String> responseEntity = mock(ResponseEntity.class);
HttpEntity requestEntity = new HttpEntity<>(qrCodeGenerateRequest,new HttpHeaders());
this.server
.expect(requestTo(this.getQrCodeUrl))
.andExpect(method(HttpMethod.POST))
.andRespond(withSuccess("successResult", MediaType.TEXT_PLAIN));
String qrImage = this.client.getQrCodeAsImage(qrCodeGenerateRequest);
server.verify();
assertThat(qrImage, is(notNullValue(String.class)));
}
}
Я не уверен, что это правильный способ сделать это, но я хочу высмеять свой LoginApiClient
в этом тесте и ввести его в QrKeyApiClient
.Но мой тест не проходит с ошибкой, которая говорит «Ошибка создания bean-компонента с именем« qrKeyApiClient »: неудовлетворенная зависимость выражается через поле« loginApiClient »;»
Так как я могу протестировать этот клиент сиздеваться над другими клиентами, которые являются его членами.