调用get in rest-sure时出现空指针异常:无法获取属性' assertionClosure'在null对象上

时间:2014-05-13 15:51:35

标签: java rest groovy rest-assured

我正在尝试使用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'

3 个答案:

答案 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