2 回答
TA贡献1853条经验 获得超6个赞
因为您正在尝试从另一个 goroutine 执行断言,所以您需要C在func()签名中使用最近添加的上下文结构 ( ) ,然后调用So该上下文。这是您的版本,稍作修改:
Convey("TestListApplication", t, func(c C) {
s.Comms.MainWaitGroup.Add(1)
application := &Application{}
err := json.Unmarshal(applicationJSON(), application)
So(err, ShouldBeNil)
revisions := &Revisions{}
err = json.Unmarshal(revisionsJSON(), revisions)
So(err, ShouldBeNil)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
line := <-s.Comms.Msg
c.So(line, ShouldEqual, "3 admin foo\n")
}()
s.listApplication(application, revisions)
wg.Wait()
})
这是 pull request #264的结果。
TA贡献1803条经验 获得超3个赞
此异常由 启动context.go#mustGetCurrentContext()。
你可以看到一个测试触发了相同的异常story_conventions_test.go#TestFailureModeNoContext
Convey("Foo", t, func() {
done := make(chan int, 1)
go func() {
defer func() { done <- 1 }()
defer expectPanic(t, noStackContext)
So(len("I have no context"), ShouldBeGreaterThan, 0)
}()
<-done
})
从测试示例来看,如果从 Convey 测试中调用 goroutine 中的 goroutine 似乎会触发无上下文恐慌。
由于 Jenkins 从 goroutine 启动测试,这可能解释了为什么您的 GoConvey 测试失败(即使它在您go test直接调用时在 Jenkins 之外运行)
- 2 回答
- 0 关注
- 297 浏览
添加回答
举报