RestAssured报错:Specification to merge with cannot be null 求助
问题原因
@BeforeAll的setUp方法初始化顺序错误:先调用TokenManager.getAuthToken()生成令牌,而该方法内部的extractJsonWebToken()会调用getBaseUriAndContentTypeToJson()获取请求规范,但此时setBaseUriAndContentTypeToJson()还未执行,导致返回的请求规范为null,传给RestAssured的.spec()方法时触发IllegalArgumentException。
修复方案
调整setUp方法的初始化顺序,先完成基础URI和Content-Type请求规范的初始化,再生成令牌并初始化认证规范:
@BeforeAll public static void setUp() { // 先初始化基础URI与Content-Type规范 setBaseUriAndContentTypeToJson( new RequestSpecBuilder() .setBaseUri(ApiEndPoints.BASE_ENDPOINT) .setContentType(ContentType.JSON) .build()); // 再获取令牌并初始化认证规范 String auth = TokenManager.getAuthToken(); setAuthentication( new RequestSpecBuilder() .addHeader("Authorization", auth) .build()); setResponseSpec( new ResponseSpecBuilder() .expectStatusCode(200) .expectContentType(ContentType.JSON) .build()); }
额外优化建议
可以让TokenManager的令牌生成逻辑独立,不依赖父类的请求规范,避免初始化顺序问题:
private static String extractJsonWebToken() { authToken = "Bearer " + given() .baseUri("https://dummyjson.com") .contentType(ContentType.JSON) .body(REQUEST_BODY) .log().all() .when() .post(GET_TOKEN_ENDPOINT) .then() .extract() .path("token"); System.out.println("Token " + authToken); return authToken; }
这样即使父类的规范未初始化,令牌生成也能正常运行,降低代码耦合度。
内容的提问来源于stack exchange,提问作者Matheus
相关产品推荐
相关产品推荐

