oauth応答のコンテンツタイプがJSONであることをテストする認証サーバーのテストを作成しています。認証サーバーがspring-security-oauth2 2.0.1.4.RELEASE
を使用していて、私のJUnitテストがrest-assured 2.9.0
を使用しています。HTTP応答コンテンツタイプに空白が含まれていない場合のorg.apache.http.entity.ContentTypeのテスト
@Test
public void testTokenEndpoint() throws Exception {
// Client Credentials Grant
ResponseBody clientCredentialsGrantResponseBody =
given(this.spec)
.authentication().basic(VALID_CLIENT_ID, VALID_CLIENT_SECRET)
.queryParameter("grant_type", CLIENT_CREDENTIALS_GRANT)
.queryParameter("username", VALID_USERNAME)
.queryParameter("password", VALID_PASSWORD)
.queryParameter("scope", VALID_SCOPES)
.when()
.post(OAUTH_TOKEN_ENDPOINT)
.then()
.assertThat().contentType(is(ContentType.APPLICATION_JSON.toString()))
.extract().response().body();
}
私はこの失敗
java.lang.AssertionError: 1 expectation failed.
Expected content-type is "application/json; charset=UTF-8" doesn't match actual content-type "application/json;charset=UTF-8".
で迎えています。このテストを実行するときにorg.apache.http.entity.ContentType
の値の型と文字セットの間にスペースが含まれていますが、認証サーバの応答のコンテンツタイプにはありません。
今私は
.assertThat().contentType(is(ContentType.APPLICATION_JSON.toString().replace(" ", "")))
を行うことによってこの問題を回避できた。しかし、私はより良い方法がなければならないと感じています。
空きスペースがないコンテンツタイプの列挙体はありますか?コンテンツ・タイプにスペースを含めるように許可サーバーを構成できますか?
私はそのような列挙型はないと思いますが、あなたのテストではcontentTypeを比較するために 'toString'を使用すべきではないと感じています。しかし、それは私の気持ちだけです。そして、私はそれを正しく行う方法もまだ分かりません! –
@JorgeCampos私は 'toString'について同意しますが、私がそれを使用しないと、期待値は引用符ではなく括弧をつけていて、' application/jsonという期待されるcontent-typeです。実際のコンテンツタイプ「application/json; charset = UTF-8」と一致しませんでした。それが問題かどうかはわかりませんでした。 – zero01alpha
ええ、私はそれをテストする方法を考えていましたHTTPプロトコルのプロパティーなので、値の代わりにプロパティーをチェックする何らかの方法が必要です。 –