You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am using spring-boot projects a lot.
All my tests using strikt as an assertions library already.
To test my rest controllers i mostly use mockMvc among my projects. but since assertions on mockMvc result body require to use hamcrest matchers it needs extra knowledge (aka learn a second assertion lib and its matchers). also the hamcrest matchers are not nice to use or type-safe.
since i know the expected result types of my controllers (which are part of my project anyway) i wrote a little extension to be able to deserialize the response body and use strikt matchers directly to assert body.
i think this is a pretty common use-case.
i would like to add it upstream, but am unsure if it could be part of the strikt-spring extension or if it should be another (strikt-mockmvc) extension.
😢 what it looks like with vanilla mock mvc DSL (using hamcrest, not typesafe):
🚸 what it looks like working around it to use strikt:
@Test
internalfun`example mockMvc test using strikt`() {
mockMvc.get("http://localhost:$port/foo")
.andExpect {
status { isOk() }
}.andDeserializeBody<List<ResultDto>>()
expectThat(resultBody) {
get { first().title }.isEqualTo("foo")
hasSize(2)
}
}
inlinefun <reifiedT> ResultActionsDsl.andDeserializeBody(mapper:ObjectMapper = jacksonObjectMapper()): T=
andReturn().response.contentAsString.let(mapper::readValue)
😎 what it looks like with fancy extension:
@Test
internalfun`example mockMvc test using strikt mockmvc extension`() {
mockMvc.get("http://localhost:$port/foo")
.andExpect {
status { isOk() }
}.andExpectBody<List<ResultDto>> {
get { first().title }.isEqualTo("foo")
hasSize(2)
}
}
// what would basically be added to strikt as an extension to make the syntax above possible:inlinefun <reifiedT> ResultActionsDsl.andDeserializeBody(mapper:ObjectMapper = jacksonObjectMapper()): T=
andReturn().response.contentAsString.let(mapper::readValue)
inlinefun <reifiedT> ResultActionsDsl.andExpectBody(crossinline block:Assertion.Builder<T>.() ->Unit): ResultActionsDsl=also {
andDeserializeBody<T>().run {
expectThat(this) {
block()
}
}
}
The text was updated successfully, but these errors were encountered:
I am using spring-boot projects a lot.
All my tests using strikt as an assertions library already.
To test my rest controllers i mostly use mockMvc among my projects. but since assertions on mockMvc result body require to use hamcrest matchers it needs extra knowledge (aka learn a second assertion lib and its matchers). also the hamcrest matchers are not nice to use or type-safe.
since i know the expected result types of my controllers (which are part of my project anyway) i wrote a little extension to be able to deserialize the response body and use strikt matchers directly to assert body.
i think this is a pretty common use-case.
i would like to add it upstream, but am unsure if it could be part of the strikt-spring extension or if it should be another (strikt-mockmvc) extension.
😢 what it looks like with vanilla mock mvc DSL (using hamcrest, not typesafe):
🚸 what it looks like working around it to use strikt:
😎 what it looks like with fancy extension:
The text was updated successfully, but these errors were encountered: