gpt4 book ai didi

junit - JUnit测试中的kotlin属性初始化程序执行

转载 作者:行者123 更新时间:2023-12-02 12:48:26 25 4
gpt4 key购买 nike

我有一个用于在Kotlin中进行测试的抽象基类:

abstract class TestBase(){
protected var session = configure()

private fun configure() {
...
return session // a live session object
}

@After
open fun tearDown() {
...
session.close()
}
}

然后在派生的测试类中,我们有
class MyTest: TestBase() {
...
@Test
fun testScenario1() {
... // uses the live session object
assertTrue(myCondition_1)
}

@Test
fun testScenario2() {
... // uses the live session object
assertTrue(myCondition_2)
}
}

当我第一次看到此代码时,我认为这将是有问题的,因为如果 session在初始化部分仅执行一次,它将在运行第一个测试后关闭。并且在第二次测试期间,由于 session已关闭,它将引发异常。但是,代码运行没有问题。跟踪它时,我看到每个测试都运行了初始化块。换句话说,为每个测试初始化​​了 session

我的问题是为什么?这是JUnit背后的行为,即对于每个测试,它将运行整个初始化程序以及该类的构造函数吗?

如果是这种情况,为什么要使用 @Before注释?我们不能只是将所有 @Before代码放在初始化程序块中

最佳答案

是的,JUnit为每个测试创建一个新的类实例。在构造函数之后调用@Before方法。

Can't we just put all the @Before code in the initializer block



是的,您可以(在Java的构造函数中)。更加与 @After对称。

关于junit - JUnit测试中的kotlin属性初始化程序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com