【发布时间】:2019-09-09 17:57:33
【问题描述】:
我对 javax 包中的调用接口有一个奇怪的问题。即,我想测试我添加的标头参数以获取与公共 API 建立连接的请求。我负责向我的请求添加标头的方法如下所示:
@Service
@AllArgsConstructor
class ProductFacadeImpl implements ProductFacade {
private NutritionixHeader nutritionixHeader;
@Override
public Invocation prepareHeaderForApiCall(String query) {
Client client = ClientBuilder.newClient();
WebTarget webTarget =
client.target("https://trackapi.nutritionix.com/v2/search/instant?query=" + query);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON_VALUE);
invocationBuilder.header("x-app-id", nutritionixHeader.getNutritionixAppId());
invocationBuilder.header("x-app-key", nutritionixHeader.getNutritionixAppKey());
return invocationBuilder.buildGet();
}
}
使用 JUnit 5 的测试如下所示:
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class ProductsFacadeImplTest {
@Mock
private NutritionixHeader nutritionixHeader;
private ProductFacadeImpl productsFacade;
@BeforeEach
void init() {
productsFacade = new ProductFacadeImpl(nutritionixHeader);
}
@Test
void prepareHeaderForApiCall() {
var query = "query";
given(nutritionixHeader.getNutritionixAppId()).willReturn(x-app-id-param);
given(nutritionixHeader.getNutritionixAppKey()).willReturn(x-app-key-param);
Invocation builder = productsFacade.prepareHeaderForApiCall(query);
builder.invoke().getHeaders();
then(nutritionixHeader).should(times(1)).getNutritionixAppId();
assertEquals(builder.invoke().getStatus(), 200);
}
当我从一行中评估一个值时会出现问题:
builder.invoke().getHeaders();
在测试中使用 IntelliJ Expression Evaluator。
我收到如下评价:
我们可以看到没有类似的参数:
x-app-id
和
x-app-key
在标题中创建我的测试中的断言。
另一方面,当我们尝试对表达式求值时:
((JerseyInvocation) builder).requestContext.getHeaders()
我们收到如下评价:
这是来自标头的理想响应,但不幸的是,我无法使用此表达式
((JerseyInvocation) builder).requestContext.getHeaders()
在我的代码中,因为 IntelliJ 无法识别带有如下消息的部分 requestContext:
我有点困惑为什么我的调试器可以处理表达式的评估:
((JerseyInvocation) builder).requestContext.getHeaders()
但是当我想在测试中自己调用此方法时,无法在我的课堂上处理它。
我将不胜感激关于如何在我的测试中调用第二种方法以获得第二个屏幕上的响应的建议。
【问题讨论】:
标签: java intellij-idea junit request jax-rs