¿Pruebas de unidades de escritura en Kotlin, compartiendo variables?

Estoy intentando crear algunas testings funcionales en Kotlin para realizar requestes a un service Cart Java utilizando la biblioteca Rest Assunetworking.

Como quiero que las testings se comporten de manera procesal, esperaba poder almacenar el resultado de la primera request de la API y pasarlo a la siguiente testing de la Unidad.

es decir

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

class CartTest : RestAssunetworkingSupport { 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()) } } 

Nunca usé realmente Kotlin, por lo que estoy buscando consejos sobre cuál sería la mejor forma de probar todos los puntos finales API.

¿O sería mejor hacer otra request dentro de la misma function y pasar el resultado al siguiente paso?

¿Cuál es la mejor manera de compartir variables entre testings?

Gracias

JUnit no proporciona ninguna garantía sobre el order de las testings, y las testings no deben depender entre sí ni mutar el estado compartido.

La solución más fácil es, de hecho, realizar las dos requestes en la misma testing.

Además, puede usar los dispositivos de testing JUnit para configurar los objects que necesita para un set de testings. Si necesita el cartId en varias testings, esa es la opción preferida.

 class CartTest : RestAssunetworkingSupport { // ... 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() { /* ... */ } } 

Ver: Delegates.notNull() , otra pregunta sobre @Before y @BeforeClass .

Las testings unitarias deben ser autónomas. Por defecto, no puede controlar el order de ejecución de la testing unitaria. Lea aquí: ¿Cómo ejecutar methods de testing en un order específico en JUnit4?

"¿O sería mejor hacer otra request dentro de la misma function y pasar el resultado al siguiente paso?"

Eso sería correcto, generalmente lo llamamos Pruebas de viaje

Si tiene procedimientos de configuration comunes en muchas testings, yo tendería a estar de acuerdo con @Before sugerencias anteriores, pero de lo contrario debería hacer que cada testing sea independiente. Kotlin puede hacer que esto sea muy agradable; consulte https://gjesse.github.io/post/unit-testing-with-kotlin—mini-dsls/ para get una descripción del ajuste de los types de operaciones comunes para las testings individuales.