期待の定義

アサーションは、他の AssertJ アサーションと同じように機能します。次の例に示すように、サポートでは、MvcTestResult のさまざまな部分に専用のアサートオブジェクトが提供されます。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/hotels/{id}", 42))
		.hasStatusOk()
		.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
		.bodyJson().isLenientlyEqualTo("sample/hotel-42.json");
assertThat(mockMvc.get().uri("/hotels/{id}", 42))
	.hasStatusOk()
	.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
	.bodyJson().isLenientlyEqualTo("sample/hotel-42.json")

リクエストが失敗した場合、交換は例外をスローしません。代わりに、交換の結果が失敗したことをアサートできます。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/hotels/{id}", -1))
		.hasFailed()
		.hasStatus(HttpStatus.BAD_REQUEST)
		.failure().hasMessageContaining("Identifier should be positive");
assertThat(mockMvc.get().uri("/hotels/{id}", -1))
	.hasFailed()
	.hasStatus(HttpStatus.BAD_REQUEST)
	.failure().hasMessageContaining("Identifier should be positive")

リクエストが予期せず失敗する可能性もあります。つまり、ハンドラーによってスローされた例外が処理されず、そのままスローされるのです。.hasFailed() と .failure() は引き続き使用できますが、交換が完了していないため、結果の一部にアクセスしようとすると例外がスローされます。

JSON サポート

MvcTestResult に対する AssertJ サポートは、bodyJson() を介して JSON サポートを提供します。

JSONPath [GitHub] (英語) が利用可能な場合は、JSON ドキュメントに式を適用できます。返される値は、サポートされているさまざまな JSON データ型専用のアサートオブジェクトを返す便利なメソッドを提供します。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members[0]")
		.asMap()
		.contains(entry("name", "Homer"));
assertThat(mockMvc.get().uri("/family")).bodyJson()
	.extractingPath("$.members[0]")
	.asMap()
	.contains(entry("name", "Homer"))

メッセージコンバーターが適切に構成されている限り、生のコンテンツを任意のデータ型に変換することもできます。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members[0]")
		.convertTo(Member.class)
		.satisfies(member -> assertThat(member.name).isEqualTo("Homer"));
assertThat(mockMvc.get().uri("/family")).bodyJson()
	.extractingPath("$.members[0]")
	.convertTo(Member::class.java)
	.satisfies(ThrowingConsumer { member: Member ->
		assertThat(member.name).isEqualTo("Homer")
	})

ターゲット Class に変換すると、汎用アサートオブジェクトが提供されます。より複雑な型の場合は、可能であれば、代わりに専用のアサート型を返す AssertFactory を使用することをお勧めします。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.extractingPath("$.members")
		.convertTo(InstanceOfAssertFactories.list(Member.class))
		.hasSize(5)
		.element(0).satisfies(member -> assertThat(member.name).isEqualTo("Homer"));
assertThat(mockMvc.get().uri("/family")).bodyJson()
	.extractingPath("$.members")
	.convertTo(InstanceOfAssertFactories.list(Member::class.java))
	.hasSize(5)
	.element(0).satisfies(ThrowingConsumer { member: Member ->
		assertThat(member.name).isEqualTo("Homer")
	})

JSONAssert (英語) もサポートされています。レスポンスの本文は、Resource またはコンテンツと照合できます。コンテンツが `.json ` で終わる場合は、クラスパス上でその名前に一致するファイルを検索します。

  • Java

  • Kotlin

assertThat(mockMvc.get().uri("/family")).bodyJson()
		.isStrictlyEqualTo("sample/simpsons.json");
assertThat(mockMvc.get().uri("/family")).bodyJson()
	.isStrictlyEqualTo("sample/simpsons.json")

別のライブラリを使用する場合は、JsonComparator (Javadoc) の実装を提供できます。