Go 在执行延迟功能时
我正在用银杏重写k8s控制器的单元测试 正如前面的TDD一样,对于每个测试,我们都会有如下内容Go 在执行延迟功能时,go,kubernetes,ginkgo,Go,Kubernetes,Ginkgo,我正在用银杏重写k8s控制器的单元测试 正如前面的TDD一样,对于每个测试,我们都会有如下内容 //创建通道对象并期望协调 g、 Expect(c.Create(context.TODO(),myObj)).NotTo(gomega.haveoccurrent()) 延迟c.Delete(context.TODO(),myObj) 我们需要的是,为测试创建一个对象,并在测试后将其从underline集群中删除 现在,在gingo上,我们正在容器的spec中运行测试。对我来说,容器是原始流程,如
//创建通道对象并期望协调
g、 Expect(c.Create(context.TODO(),myObj)).NotTo(gomega.haveoccurrent())
延迟c.Delete(context.TODO(),myObj)
我们需要的是,为测试创建一个对象,并在测试后将其从underline集群中删除
现在,在gingo
上,我们正在容器的spec
中运行测试。对我来说,容器
是原始流程,如果是这种情况,是否意味着在它
规范中定义的延迟
将在退出容器
之前执行,而不是退出它
规范
比如说,
var=descripe(“我的设计”,func(){
它(“a”,func(){
fmt.Println(100)
defer func(){fmt.Println(“a”,100)}()
})
它(“b”,func(){
fmt.Println(200)
defer func(){fmt.Println(“b”,200)}()
})
})
结果会是:
a
100
a100
200
b200
或
b
100
200
b200
a100
在我的情况下,我肯定什么是第一个行为。或者我在获得
延迟
行为方面走错了方向?我的意思是,我应该在每次之前和每次之后查看吗?您计划并行运行测试吗?如果是这样,那么结果将是不可预测的。在这种情况下,建议为每个流程提供一个单独的外部资源实例
我建议你看看是怎么做的。我相信,他们创造了新的控制平面,每次都被称为。如各国所述:
并行运行时,每个并行进程将在PreforeSuite和AfterSuite函数之前运行
您是否计划并行运行测试?如果是这样,那么结果将是不可预测的。在这种情况下,建议为每个流程提供一个单独的外部资源实例
我建议你看看是怎么做的。我相信,他们创造了新的控制平面,每次都被称为。如各国所述:
并行运行时,每个并行进程将在PreforeSuite和AfterSuite函数之前运行
您将看到第一个行为,因为defer
s的封闭范围与前面的Println
是相同的匿名函数defer
红色函数在退出作用域时被调用。您将看到第一个行为,因为defer
s的封闭作用域与前面的Println
是相同的匿名函数<代码>延迟
红色函数在退出作用域时被调用。“原始进程”与此无关。在您的例子中,周围的函数是您的匿名func()
传递给它(并由它调用)“原始进程”与此无关。在您的例子中,周围的函数是您的匿名func()
传递给(并由其调用)It
谢谢提醒,我正在查看envtest。谢谢提醒,我正在查看envtest。