我正在尝试使用restured来实现RESTful API的测试,但是在尝试调用get动作时我遇到了一个空指针异常。授权是一种自定义方案,因此一旦我获得了请求的授权签名,我就将其作为标题添加到请求中:
String auth = ...CUSTOM ALGORITHM ...;
String pragma = ... OTHER CUSTOM HEADER ...;
RequestSpecification requestSpec = new RequestSpecBuilder()
.addHeader("Authorization", auth)
.addHeader("pragma", pragma)
.build();
RestAssured.baseURI = "https://blahblah.staging.somewhere.net";
RestAssured.port = 443;
RestAssured.basePath = "/endpoint_name/somefolder/resource?status=active";
RestAssured.urlEncodingEnabled = false;
requestSpec.get();
这会导致以下错误:
java.lang.NullPointerException:无法在null对象上获取属性'assertionClosure'
答案 0 :(得分:8)
尝试使用RestAssured.given()来调用您的GET。您可以通过执行以下操作来使用您的requestSpec:
RestAssured.given()
.spec(requestSpec)
.log().all()
.get()
.then()
.log().all()
.statusCode(200);
答案 1 :(得分:0)
我的同事终于找到了问题所在。我们使用自定义身份验证系统来提高安全性,问题与生成的身份验证标头值的时间戳有关。时间戳太旧了。
答案 2 :(得分:0)
我在RestAssured 3.0.7中遇到了同样的问题
如果您使用RequestSpecification
构建RequestSpecBuilder
,看起来好像没有设置RequestSpecificationImpl
的某些内部状态(responseSpecification
字段),则在调用get / post时NPE会产生什么结果方法。
代替使用:
RequestSpecification requestSpec = new RequestSpecBuilder()
.addHeader("Authorization", auth)
.addHeader("pragma", pragma)
.build();
使用:
RestAssured.with().header("Authorization", auth).header("pragma", pragma)
with()
等同于given
,后者构成正确的RequestSpecification