Lukasz Kalnik
01/11/2022, 1:10 PMclass NetworkEitherCallAdapterTest : StringSpec({
private lateinit var server: MockWebServer
private lateinit var service: CallErrorTestClient
beforeAny {
server = MockWebServer()
server.start()
service = Retrofit.Builder()
.baseUrl(server.url("/"))
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(EitherCallAdapterFactory.create())
.build()
.create(CallErrorTestClient::class.java)
}
afterAny { server.shutdown() }
"should return ResponseMock for 200 with valid JSON" {
server.enqueue(MockResponse().setBody("""{"response":"Arrow rocks"}"""))
val body = service.getEither()
body shouldBe ResponseMock("Arrow rocks").right()
}
// More tests...
I want to run the test class 3 times with different service
instances (which will use different ConverterFactory
each). What is the most readable way to achieve it? I don't want to parameterize every test, I want to parameterize the whole class and repeat it.sam
01/11/2022, 1:22 PMsam
01/11/2022, 1:27 PMLukasz Kalnik
01/11/2022, 1:32 PMsam
01/11/2022, 1:32 PMLukasz Kalnik
01/11/2022, 1:45 PMserver
and service
are regenerated for each test inside the factory using beforeAny
?Lukasz Kalnik
01/11/2022, 1:47 PMjsonConverterFactory
(which in my example actually should replace the hardcoded GsonConverterFactory.create()
call). But then the server
and service
need to be recreated for every test inside the factory.Lukasz Kalnik
01/11/2022, 1:51 PM?.
everytime.sam
01/11/2022, 1:57 PMsam
01/11/2022, 1:57 PMsam
01/11/2022, 1:58 PMsam
01/11/2022, 1:58 PMLukasz Kalnik
01/11/2022, 2:00 PMlateinit
as before.sam
01/11/2022, 2:00 PMLukasz Kalnik
01/11/2022, 2:00 PM!!
and I don't mind it.sam
01/11/2022, 2:01 PMsam
01/11/2022, 2:01 PMLukasz Kalnik
01/11/2022, 2:01 PMLukasz Kalnik
01/11/2022, 2:01 PMLukasz Kalnik
01/11/2022, 2:01 PMsam
01/11/2022, 2:01 PMLukasz Kalnik
01/11/2022, 2:02 PMsam
01/11/2022, 2:02 PMLukasz Kalnik
01/11/2022, 2:03 PMsam
01/11/2022, 2:03 PMLukasz Kalnik
01/11/2022, 2:04 PM"should return IOError when no response" {
server!!.enqueue(MockResponse().apply { socketPolicy = SocketPolicy.NO_RESPONSE })
val body = service!!.getEither()
body.shouldBeInstanceOf<Left<IOError>>()
.value.cause.shouldBeInstanceOf<SocketTimeoutException>()
}
Lukasz Kalnik
01/11/2022, 2:04 PMsam
01/11/2022, 2:05 PM"mytest" {
withServer { server- ->
}
}
sam
01/11/2022, 2:05 PMLukasz Kalnik
01/11/2022, 2:27 PM!!
operator.Lukasz Kalnik
01/11/2022, 2:28 PMsam
01/11/2022, 2:28 PM