当前位置: 首页 > 知识库问答 >
问题:

用静态编程语言编写单元测试,共享变量?

施同
2023-03-14

我试图在Kotlin中创建一些功能测试,以使用Rest-Assured库向Cart Java服务发出请求。

因为我希望测试按程序进行,所以我希望能够存储第一个API请求的结果,并将其传递给下一个单元测试。

createCartTest()--

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())
    }
}

从来没有真正使用过静态编程语言,所以寻找测试所有APIendpoint的最佳方法的建议。

还是在同一个函数中发出另一个请求并将结果传递给下一步更好?

跨测试共享变量的最佳方式是什么?

谢谢

共有3个答案

洪安顺
2023-03-14

如果您在许多测试中都有通用的设置过程,我倾向于同意上面的建议,否则您应该使每个测试都是独立的。Kotlin可以做得很好-看到了吗https://gjesse.github.io/post/unit-testing-with-kotlin---mini-dsls/ 有关为单个测试包装常见操作类型的说明。

邹书
2023-03-14

单元测试应该是独立的。默认情况下,您无法控制单元测试的执行顺序。请阅读这里:如何在JUnit4中以特定顺序运行测试方法?

"或者在同一个函数中再发出一个请求,然后将结果传递给下一步会更好吗?"

这是正确的,我们通常称之为旅程测试

涂选
2023-03-14

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(),另一个关于@前@BeforeClass的问题。

 类似资料:
  • 上周我更新了Kotlin 1.5,昨天看到谷歌打算让Jetpack成为设计UI的首选选项后,我想做一些测试。 问题是将我的项目更新为静态编程语言1.5,当尝试构建项目时,我得到以下错误: 静态编程语言1.5与Jetpack Compose不兼容吗?在谷歌搜索问题后,我找到了版本,其中提到了Jetpack Compose,但不是以“不兼容”的方式。 你对此有任何答案吗?我应该使用吗?在这种情况下,我

  • 我试图在kotlin中的两个活动之间传递一个值,但如果我使用下面的代码,那么我只得到“Hello World”默认值,而不是PREFERENCE_NAME值。我的文本ID名称是android: id="@id/tv_count"感谢任何帮助。

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 我在java中使用mockito编写单元测试。 这就是我要测试的声明。 电影是电影名称的集合,是识别电影的关键。 我嘲笑了守望者班 Mockito.when(watcher.watch(Matchers.any(Set.class))) “thenReturn”中包括什么??