测试中的错误与致命

时间:2014-07-06 05:54:08

标签: go

我正在使用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不会停止测试执行。

我应该在测试中使用什么? ErrorFatal

1 个答案:

答案 0 :(得分:14)

我认为您使用Error直到继续运行测试无法为您提供更多有用的调试信息,然后您使用Fatal。如果你不确定(就好像你正在编写一个像CodeIs这样的因素分析方法用于许多不同的测试),那就去Error,因为你是通常不会通过继续运行测试来做伤害

按照这个标准,你对失败的JSON解码Fatal有意义,之后,正如你所说,没有任何有趣的事情会发生。 CodeIsContentTypeIsJson使用Error是可以理解的,因为它们是将在不同测试中使用的方法。

一个不同的例子可能更好地说明为什么要使用Error,直到你知道其他任何有趣的事情都会发生:说你想要理智 - 检查关于JSON响应的几个不同的事情,以及它们可能是错误的任何子集。 (例如,您的产品API可能使用错误的类型返回price,或者当您不希望它时,它可能无法返回空的description,或者......)使用Error而不是每次检查Fatal意味着您的测试将始终运行它们并报告哪些失败。

相关问题