我正在使用Go-Json-Rest开发JSON Web服务。我正在写测试。
...
recorded = test.RunRequest(t, &api.Handler,
test.MakeSimpleRequest("POST", "http://localhost/api/products",
product))
recorded.CodeIs(201)
recorded.ContentTypeIsJson()
var newProduct Product
err := recorded.DecodeJsonPayload(&newProduct)
if err != nil {
t.Fatal(err)
}
...
我正在使用Fatal
因为我来自Python世界,assert
会立即停止测试用例方法的执行。这是有道理的:为什么尝试解码数据,如果它不是JSON?
但recorded.CodeIs(201)
,recorded.ContentTypeIsJson()
以及我见过的其他测试使用的Error
不会停止测试执行。
我应该在测试中使用什么? Error
或Fatal
?
答案 0 :(得分:14)
我认为您使用Error
直到继续运行测试无法为您提供更多有用的调试信息,然后您使用Fatal
。如果你不确定(就好像你正在编写一个像CodeIs
这样的因素分析方法用于许多不同的测试),那就去Error
,因为你是通常不会通过继续运行测试来做伤害。
按照这个标准,你对失败的JSON解码Fatal
有意义,之后,正如你所说,没有任何有趣的事情会发生。 CodeIs
和ContentTypeIsJson
使用Error
是可以理解的,因为它们是将在不同测试中使用的方法。
一个不同的例子可能更好地说明为什么要使用Error
,直到你知道其他任何有趣的事情都会发生:说你想要理智 - 检查关于JSON响应的几个不同的事情,以及它们可能是错误的任何子集。 (例如,您的产品API可能使用错误的类型返回price
,或者当您不希望它时,它可能无法返回空的description
,或者......)使用Error
而不是每次检查Fatal
意味着您的测试将始终运行它们并报告哪些失败。