【问题标题】:Kotlin Unit test instantiate for each test scenarioKotlin 单元测试实例化每个测试场景
【发布时间】:2020-11-24 09:56:56
【问题描述】:

有一个单元测试类,在构造中定义了一些参数

class VersionConsumerSpec {


    private val path = Paths.get("target").toAbsolutePath().toString()
    private val kafkaPort = (4000..8000).random()
    private val zooKeeperPort = (4000..8000).random()
    private val config: AppConfig = createAppConfig(kafkaPort)
    private val producer = createKafkaProducer()

    init {
        println("hello world")
    }

    @ExperimentalCoroutinesApi
    @ObsoleteCoroutinesApi
    @Test
    @DisplayName("test1")
    fun test1() {
    }

    @ExperimentalCoroutinesApi
    @ObsoleteCoroutinesApi
    @Test
    @DisplayName("test2")
    fun test2() {
    }

}

每次测试都会执行所有定义的变量,即使init在这里也执行了两次。 然后我遇到了问题,因为我想为所有测试用例声明所有这些变量。

我在这里出了点问题?在 Java 或 Scala 中这不会发生。

就像如果对于每个测试,类都会一次又一次地完全实例化。

【问题讨论】:

  • 您使用哪个库进行单元测试?是junit吗?如果是的话请添加到标签中
  • 它是 Jupiter-api 5.6.2 “添加到标签”是什么意思???
  • 我的意思是在问题中添加junitjunit-jupiter 标签
  • 您是否尝试使用@BeforeAll 注解来初始化变量? junit.org/junit5/docs/5.0.2/api/org/junit/jupiter/api/…

标签: kotlin junit junit-jupiter


【解决方案1】:

我猜你正在寻找@TestInstance 注释。 PER_CLASS 模式允许每个测试类创建一个新的测试实例。

@TestInstance(PER_CLASS)
class VersionConsumerSpec {
    ...

【讨论】:

  • 是的,这就是我需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多