【发布时间】:2015-10-20 18:29:07
【问题描述】:
我想测试一个构造函数,但是如果没有提供一些数据我需要恐慌,我该如何从测试中的恐慌中恢复?
目前我已经在我的 TestNew 函数中添加了一个带有恢复的延迟,但是如果我的地图中的一个元素的 URL 为空,则不会检查其余部分。
t.go
package testing
type test {
url string
}
func New(ops map[string]string) *test {
if ops["url"] == "" {
panic("Url missing")
}
var t = new(test)
t.url = ops["url"]
return t
}
t_test.go
package testing
type testTest map[string]string
var testingTest = []testTest {
testTest {
"url": "test",
},
testTest{
"url": "",
},
}
func NewTest(t *testing.T) {
defer func() {
recover()
}()
for _, e := range testingTest {
url := New(e)
url.hasUrl(t, e["url"])
}
}
func (s *test) hasUrl(t *testing.T, u string) {
if s.url != u {
t.Errorf("Expected %s to be equal with %s", s.url, u)
}
}
【问题讨论】:
-
你能发布你的延期恢复吗?这当然是你这样做的......我没有看到你的代码的猜测是你在你的恢复中返回并且删除返回语句会给你预期的结果。此外,在您提供回答问题所需的信息之前,我建议您阅读此内容; blog.golang.org/defer-panic-and-recover
-
@evanmcdonnal 现在看看,谢谢
-
谢谢,我试图解释为什么你的代码现在没有按预期工作:D
标签: go