[英]Writing Unit tests in Kotlin, sharing variables?
我正在尝试在Kotlin中创建一些功能测试,以使用Rest Assured库向Cart Java服务发出请求。
由于我希望测试在程序上表现,我希望我可以存储第一个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中按特定顺序运行测试方法?
“或者在同一个函数中发出另一个请求并将结果传递给下一步会更好吗?”
这是正确的,我们通常称之为Journey Tests
如果你在许多测试中有共同的设置程序,我倾向于同意@Before
上面的建议,但是否则你应该让每个测试都自包含。 Kotlin可以使这个非常好 - 请参阅https://gjesse.github.io/post/unit-testing-with-kotlin---mini-dsls/ ,了解包装各个测试的常见操作类型的说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.