Postanowiłem sprawdzić kotest w akcji i mam kilka pytań, zebrałem więc kilka niewiadomych do jednego testu:
class ProjectConfig : AbstractProjectConfig() {
override fun extensions() = listOf(SpringAutowireConstructorExtension)
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class AuthenticatorTest(@LocalServerPort val port: Int) : BehaviorSpec({
val mongoContainer = GenericContainer<Nothing>("mongo:latest")
listener(mongoContainer.perSpec())
val restTemplate = RestTemplate()
given("valid authenticate command") {
val command = AuthenticationCommand("john@doe.com", "qwe123")
`when`("authenticate endpoint gets invoked") {
val response = restTemplate.postForEntity(url(port, "/api/auth"), command, AuthenticationResult::class.java)
then("http status is 200 ok") {
response.statusCode shouldBe HttpStatus.OK
}
}
}
})
fun url(port: Int, endpoint: String) = "http://localhost:$port$endpoint"
-
(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
,restTemplate
, sklejanie urla z portem w ten sposób jak wyżej - czy jest jakiś lepszy sposób do testowania http w Springu z kotest? -
listener(mongoContainer.perSpec())
o ile dobrze rozumiem, to tworzy to nowy kontener z mongo per każdy spec? Jak stworzyć jeden kontener i współdzielić go między wszystkie testy w aplikacji? Przed testami wolę zrobić dropa kolekcji niż podnosić od nowa kontener przy każdej nowej klasie testów -
val response = restTemplate.postForEntity(url(port, "/api/auth"), command, AuthenticationResult::class.java)
nie działa.
Implementacja tej klasy todata class AuthenticationResult(val userId: String, val token: String)
, niestety dostaję
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Ten test przechodzi gdy zwracany typ dam jako Any
, dostaję wtedy odpowiedź w postaci mapy, obstawiam że jednak da się to skonfigurować tak by dostawać pełny obiekt?