写作单元在Kotlin测试,共享变量?

我正在尝试在Kotlin中创建一些功能测试,以使用Rest Assured库向购物车Java服务器发出请求。

因为我希望测试的行为程序,我希望我可以存储第一个A​​PI请求的结果,并将其传递到下一个单元测试。

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/以获取对单个测试的常见操作类型的包装描述。