问题描述
我有一个kotlin kotest(以前称为kotlintest)BehaviorSpec
下面有一个Given("...")
和下面的许多When("...") Then("...")
我想在整个Spec(分别是每个Given
子句)完成之后执行清理。
@MicronautTest
class StructurePersistSpec(
private val iC : InstancesC
) : BehaviorSpec({
// afterSpec {
finalizeSpec {
cleanup()
}
Given("...") {
When("...") {
Then("...") {
...
}
Then("...") {
...
}
}
When("...") {
Then("...") {
...
}
Then("...") {
...
}
}
}
...
}
使用afterSpec { }
时,我对When
子句进行了多次调用(数量为afterSpec { }
s ???),而不仅仅是在规范完成后一个(或每个Given
条款的结尾)
使用finalizeSpec { }
时,它根本不会被调用(永远不会命中内部的断点)
我在做什么错了?
还是我错过了BehaviorSpec
的一些特色?
解决方法
接到多个电话的原因可能是您为测试设置了不同的IsolationMode
。
这意味着将为每个测试重新创建(然后清除)您的规范。为了从框架进行单个afterSpec
调用,您的IsolationMode
必须设置为SingleInstance
。
请记住,这可能会影响测试的执行方式,从而影响其有效性或通过能力。