我正在用 ginkgo 重写我们的 k8s 控制器的单元测试。
与之前的 TDD 一样,对于每个测试,我们都会有类似的东西。
// Create the Channel object and expect the Reconcile
g.Expect(c.Create(context.TODO(), myObj)).NotTo(gomega.HaveOccurred())
defer c.Delete(context.TODO(),myObj)
我们想要的是,为测试创建一个对象,并在此测试后将其从下划线集群中删除。
现在,ginkgo
我们正在spec
容器内运行测试。对我来说,这container
是原始过程,如果是这种情况,是否意味着规范中defer
定义的将在退出而不是退出规范It
之前执行。container
It
例如,
var _ = Describe("my desr", func(){
It("a", func(){
fmt.Println(100)
defer func(){fmt.Println("a", 100)}()
})
It("b", func(){
fmt.Println(200)
defer func(){fmt.Println("b", 200)}()
})
})
结果会是:
一个
100
a100
200
b200
或者
b
100
200
b200
a100
就我而言,我绝对是第一个行为。或者我在获得defer
行为方面的方向是错误的?我的意思是,我应该研究BeforeEach
andAfterEach
方法吗?