Написание модульных тестов в Котлине, обмен переменных?

Я пытаюсь создать некоторые функциональные тесты в Kotlin, чтобы отправлять запросы на службу Cart Java, используя Rest Assured library.

Поскольку я хочу, чтобы тесты выполнялись процедурно, я надеялся, что смогу сохранить результат первого запроса API и передать его следующему модулю.

т.е.

createCartTest () -> cartId -> getCartForWebsiteTest (cartId)

class CartTest : RestAssuredSupport { val port = 8080 val url = "http://localhost:" val cartId = null /** * Create a cart object */ @Test fun createCartTest() { given(). now(). body("websiteId=1"). contentType(ContentType.URLENC). post(url + port + "/orders/cart/create.do"). then(). statusCode(200). body("summary.numItems", equalTo(0)). body("summary.visibleNumItems", equalTo(0)). body("summary.cartId", notNullValue()). body("summary.version", notNullValue()) } /** * Fetch a cart object created by websiteId and cartId */ @Test fun getCartForWebsite() { given(). now(). body("websiteId=1&cartId=" + cartId). contentType(ContentType.URLENC). post(url + port + "/orders/cart/getCartForWebsite.do"). then(). statusCode(200). body("summary.numItems", equalTo(0)). body("summary.visibleNumItems", equalTo(0)). body("summary.cartId", equalTo(cartId)). body("summary.version", notNullValue()) } } 

Никогда не использовал Kotlin, поэтому поиск рекомендаций в том, что будет лучшим способом протестировать все конечные точки API, работает.

Или было бы лучше сделать другой запрос внутри одной и той же функции и передать результат на следующий шаг?

Каков наилучший способ обмена переменными во всех тестах?

благодаря

JUnit не предоставляет никаких гарантий относительно порядка тестирования, и тесты не должны зависеть друг от друга и не изменять существующее состояние.

Самое простое решение состоит в том, чтобы выполнить два запроса в одном и том же тесте.

Кроме того, вы можете использовать тестовые приборы JUnit для настройки объектов, необходимых для набора тестов. Если вам понадобится cartId в нескольких тестах, это предпочтительный вариант.

 class CartTest : RestAssuredSupport { // ... var cartId: Int by Delegates.notNull() @Before fun setUp() { // Set up the cartId. This will run before each test. Use @BeforeClass to run once } @Test fun getCartForWebsite() { /* ... */ } } 

См.: Delegates.notNull() , еще один вопрос о @Before и @BeforeClass .

Единичные тесты предназначены для самостоятельного использования. По умолчанию вы не можете контролировать порядок выполнения модульного теста. Читайте здесь: Как запустить тестовые методы в определенном порядке в JUnit4?

«Или было бы лучше сделать другой запрос внутри одной и той же функции и передать результат на следующий шаг?»

Это было бы правильно, мы обычно называем это испытаниями поездок

Если у вас есть общие процедуры настройки во многих тестах, я бы согласился с предложениями @Before выше, но в противном случае вы должны сделать каждый тест самостоятельно. Kotlin может сделать это очень красивым – см. https://gjesse.github.io/post/unit-testing-with-kotlin—mini-dsls/ для описания обертывания общих типов операций для отдельных тестов.

Intereting Posts
Работа для администратора устройства api не имеет собственного профиля «kapt.generateStubs» не используется плагином «kotlin-kapt» Можно ли использовать Allatori в исходном коде Kotlin? Котлин коанс не работает? Я сошел с ума? В чем разница при добавлении частного модификатора к аргументам в конструкторе Kotlin? LibGDX Scene2d UI: проблемы с таблицей внутри таблицы spring.config.location не работает на Spring Boot 2.0.0 M6 Как изменить префикс последовательности Kotlin, но сохранить хвост? между объектом и GoogleMap в kotlin Как использовать «для» для этого случая Передача параметров пользовательскому получателю в котлин Ошибка в печатном простом номере с использованием функций высокого порядка в котлине Почему в Котлине был удален индексный цикл? Как использовать одни и те же конструкторы в разных классах, а также определять конструкторы в интерфейсе? Kotlin Generics и nullable Тип класса