如何通过interceptTestCase来更改KotlinTest中的测试对象属性
我正在尝试使用interceptTestCase方法为KotlinTest中的测试用例设置属性,如下所示:
class MyTest : ShouldSpec() { private val items = mutableListOf<String>() private var thing = 123 override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) { items.add("foo") thing = 456 println("Before test ${items.size} and ${thing}") test() println("After test ${items.size} and ${thing}") } init { should("not work like this") { println("During test ${items.size} and ${thing}") } } }
我得到的输出是:
在测试1和456之前
在测试0和123期间
经过测试1和456
所以我所做的更改在测试用例中是不可见的。 在每次测试执行之前,我应该如何更改属性?
你应该通过TestCaseContext
访问当前的规范。 每个测试都有其独立的Spec
,例如:
override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) { // v--- casting down to the special Spec here. with(context.spec as MyTest) { //^--- using with function to take the `receiver` in lambda body items.add("foo") // -- // |<--- update the context.spec properties thing = 456 // -- println("Before test ${items.size} and ${thing}") test() println("After test ${items.size} and ${thing}") } }