5

我正在尝试使用 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:无法在空对象上获取属性“assertionClosure”

4

4 回答 4

10

尝试使用 RestAssured.given() 调用您的 GET。您可以通过执行以下操作来使用您的 requestSpec:

RestAssured.given()
.spec(requestSpec)
.log().all()
.get()
.then()
.log().all()
.statusCode(200);
于 2014-05-16T17:41:10.210 回答
1

我在使用 RestAssured 3.0.7 时遇到了同样的问题

看起来,如果您使用未设置的某些内部状态(字段)进行构建RequestSpecification,则RequestSpecBuilder在调用 get/post 方法时 NPE 会产生什么结果。RequestSpecificationImplresponseSpecification

而不是使用:

RequestSpecification requestSpec = new RequestSpecBuilder()
       .addHeader("Authorization", auth)
       .addHeader("pragma", pragma)
       .build();

利用:

RestAssured.with().header("Authorization", auth).header("pragma", pragma)

with()相当于given哪些构造正确RequestSpecification

于 2018-10-19T07:19:45.273 回答
0

我的同事终于弄清楚了问题所在。我们使用自定义身份验证系统来获得额外的安全性,问题与生成的身份验证标头值上的时间戳有关。时间戳太旧了。

于 2014-07-31T22:32:20.397 回答
0

这是一个放心的错误

代替

    requestSpec.get();

尝试:

Response response = RestAssured.given(requestSpec).get();

或者

Response response = RestAssured.given().spec(reqSpec).get();

这是已经提交的错误: https ://github.com/rest-assured/rest-assured/issues/938

于 2021-09-02T07:35:09.403 回答