2017-12-13 6 views
1

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(" ", ""))) 

を行うことによってこの問題を回避できた。しかし、私はより良い方法がなければならないと感じています。

空きスペースがないコンテンツタイプの列挙体はありますか?コンテンツ・タイプにスペースを含めるように許可サーバーを構成できますか?

+1

私はそのような列挙型はないと思いますが、あなたのテストではcontentTypeを比較するために 'toString'を使用すべきではないと感じています。しかし、それは私の気持ちだけです。そして、私はそれを正しく行う方法もまだ分かりません! –

+0

@JorgeCampos私は 'toString'について同意しますが、私がそれを使用しないと、期待値は引用符ではなく括弧をつけていて、' application/jsonという期待されるcontent-typeです。実際のコンテンツタイプ「application/json; charset = UTF-8」と一致しませんでした。それが問題かどうかはわかりませんでした。 – zero01alpha

+0

ええ、私はそれをテストする方法を考えていましたHTTPプロトコルのプロパティーなので、値の代わりにプロパティーをチェックする何らかの方法が必要です。 –

答えて

1

あなたは春から以下のクラスを使用して試みることができる:org.springframework.http.MediaType

はスペースin the implementationがないように見えます。

関連する問題