Доброго времени суток.
Есть некий тест, в данном виде тест рабочий
package steps
import io.restassured.builder.RequestSpecBuilder
import io.restassured.specification.RequestSpecification
import net.thucydides.core.annotations.Step
open class CommonSteps {
private val userRelativeUri = "user/"
@Step
private fun getRequestSpec() : RequestSpecification {
return RequestSpecBuilder()
.setBaseUri("https://api.site.ru/")
.build()
}
@Step
protected fun getUserByIdRequestSpec(id: Int) : RequestSpecification {
return getRequestSpec().basePath(userRelativeUri + id)
}
}
package steps
import io.restassured.RestAssured.given
import io.restassured.response.Response
import model.expected.User
import net.thucydides.core.annotations.Step
import org.hamcrest.Matchers.`is`
import org.hamcrest.Matchers.equalTo
open class UserSteps : CommonSteps() {
private lateinit var response: Response
@Step
open fun getUserByIdAsWebClient(id: Int) {
response = given().spec(getUserByIdRequestSpec(id)).get()
}
@Step
open fun requestedUserShouldBePresentInResponse(user: User) {
response.then()
.body("id", `is`(user.id))
.body("title", equalTo(user.title))
}
}
Тест:
import model.expected.User
import org.junit.runner.RunWith
import net.serenitybdd.junit.runners.SerenityRunner
import net.thucydides.core.annotations.Steps
import org.junit.Test
import steps.UserSteps
@RunWith(SerenityRunner::class)
class CatalogUser {
@Steps
lateinit var userSteps : UserSteps
@Test
fun successGetUserById() {
val user = User(167442, "Bill")
userSteps.getUserByIdAsWebClient(user.id)
userSteps.requestedUserShouldBePresentInResponse(user)
}
}
Есть проблема - как избавиться от сохранения респонса в переменную ?
При использовании Java - респонс шарится между тестами автоматом и последний ответ всегда доступен через then()
В котлине - нет, если убрать переменную response, то при обращении к then() получаем NPE