У меня есть такой метод:
@Service
public class ProductFacadeImpl implements ProductFacade {
private NutritionixHeader nutritionHeaderParam;
private RestTemplate restTemplate;
public ProductFacadeImpl(NutritionixHeader nutritionHeaderParam, RestTemplate restTemplate) {
this.nutritionHeaderParam = nutritionHeaderParam;
this.restTemplate = restTemplate;
}
public HttpEntity addUniversalHeaderForRequest() {
HttpHeaders headers = new HttpHeaders();
headers.set("x-app-id", nutritionHeaderParam.getNutritionixAppId());
headers.set("x-app-key", nutritionHeaderParam.getNutritionixAppKey());
return new HttpEntity(headers);
}
}
Я хочу проверить, правильно ли мой метод добавляет заголовки в HTTP-запрос.
Мой тест выглядит так:
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class ProductFacadeImplTest {
@Mock
private NutritionixHeader nutritionixHeader;
@Mock
private RestTemplate restTemplate;
@InjectMocks
private ProductFacadeImpl productFacadeImpl;
@Mock
private UriComponentsBuilder uriComponentsBuilder;
@Mock
private ResponseEntity responseEntity;
@Mock
private HttpHeaders httpHeaders;
@BeforeEach
void setUp() {
productFacadeImpl = new ProductFacadeImpl(nutritionixHeader, restTemplate);
}
@Test
void addUniversalHeaderForRequest() {
//given
given(nutritionixHeader.getNutritionixAppId()).willReturn("id");
given(nutritionixHeader.getNutritionixAppKey()).willReturn("key");
//when
productFacadeImpl.addUniversalHeaderForRequest();
ArgumentCaptor<HttpEntity> httpEntityCapture = ArgumentCaptor.forClass(HttpEntity.class);
ArgumentCaptor<HttpHeaders> httpHeadersCaptor = ArgumentCaptor.forClass(HttpHeaders.class);
verify(httpHeaders).set(eq("x-app-id"), eq("id"));
verify(httpHeaders).set(eq("x-app-key"), eq("key"));
HttpHeaders headers = httpEntityCapture.getValue().getHeaders();
assertEquals("id",
headers.entrySet()
.stream()
.filter(entry -> entry.getKey().equals("x-app-id"))
.map(Entry::getValue)
.flatMap(Collection::stream)
.findFirst()
.orElse(""));
}
}
, но когда я запускаю его, я получаю информацию вроде:
Wanted but not invoked:
httpHeaders.set("x-app-id", "id");
-> at com.application.nutritionix.service.ProductFacadeImplTest.addUniversalHeaderForRequest(ProductFacadeImplTest.java:196)
Actually, there were zero interactions with this mock.
Я знаю, что я предполагаю использовать ArgumentCaptor
но я не могу определить, как правильно использовать httpEntityCapture
для решения этого примера. Спасибо за ваши предложения о том, как достичь цели.