提案详情覆盖率用一行输出来总结其结果,例如 "覆盖率:89.1%的语句"。如果它能说一些类似 "覆盖率:89.1%的语句,97.3%无错误处理" 的话,将会更有用。新的数字将从其分母中去除位于 'if err != nil {...}' 代码块内的语句数量。除了其他不足之处外,当前的数字随着添加更多的错误处理而变得更糟。
pxq42qpu1#
CC @thanm
kiz8lqtg2#
错误处理行的定义是什么?'if err != nil {...}' 不能作为错误处理方式,因为错误可以通过多种其他方式进行处理。从使用不同的变量名(或者根本不使用变量)到使用switch语句或其他控制流机制,有时将它们放入数据结构以便稍后检查,因为错误只是值。此外,错误情况通常与任何其他情况一样重要进行测试。这会给人一种错误处理代码在某种程度上不那么重要的印象。
pod7payv3#
完美不是必须的,只需要稍微更有帮助的输出...。在2024年4月7日星期日晚上11:03,gophun ***@***.***>写道:错误处理行的定义是什么?'if err != nil {...}'不能是它,因为错误可以通过许多其他方式处理。从使用不同的变量名(或者根本不使用变量)到使用switch语句或其他控制流机制,有时将它们放入数据结构中以便稍后检查,因为错误只是值。此外,错误情况通常与任何其他情况一样重要进行测试。这会给人一种错误处理代码在某种程度上不那么重要的印象。——直接回复此电子邮件,查看GitHub上的<#66713 (comment)>,或取消订阅< https://github.com/notifications/unsubscribe-auth/ABJIAI7G2MRTLLDAA3JMSA3Y4ICIFAVCNFSM6AAAAABF3OZMRKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBRG43TQMZSGU >。您收到此邮件是因为您创建了该线程。消息ID:***@***.***>
vddsk6oq4#
关于收集错误处理代码非常严重的覆盖率数据,我理解你的痛苦。在为新的覆盖率代码编写测试时,我也遇到了一些类似的问题,即编写输出新式覆盖率数据文件的代码基本上看起来像
func writeTheWholeThing(w io.Writer) error { if _, err := w.Write(...); err != nil { return err } <... repeat 50 times...> if _, err := w.Write(...); err != nil { return err } return nil }
当然,在大多数正常的测试运行中,上述写入操作都不会失败,当然,覆盖的%语句也会反映出这一点。如果你能以一种允许你注入错误的方式编写代码,那将是我的建议。一个示例(对于上面的func代码来说效果很好):https://go.googlesource.com/go/+/45b641ce15159e29fa4494b837493042d1e10384/src/runtime/coverage/testdata/harness.go#166
q0qdq0h25#
这是一个#53271的特殊情况。
5条答案
按热度按时间pxq42qpu1#
CC @thanm
kiz8lqtg2#
错误处理行的定义是什么?'if err != nil {...}' 不能作为错误处理方式,因为错误可以通过多种其他方式进行处理。从使用不同的变量名(或者根本不使用变量)到使用switch语句或其他控制流机制,有时将它们放入数据结构以便稍后检查,因为错误只是值。
此外,错误情况通常与任何其他情况一样重要进行测试。这会给人一种错误处理代码在某种程度上不那么重要的印象。
pod7payv3#
完美不是必须的,只需要稍微更有帮助的输出...。
在2024年4月7日星期日晚上11:03,gophun ***@***.***>写道:错误处理行的定义是什么?'if err != nil {...}'不能是它,因为错误可以通过许多其他方式处理。从使用不同的变量名(或者根本不使用变量)到使用switch语句或其他控制流机制,有时将它们放入数据结构中以便稍后检查,因为错误只是值。此外,错误情况通常与任何其他情况一样重要进行测试。这会给人一种错误处理代码在某种程度上不那么重要的印象。——直接回复此电子邮件,查看GitHub上的<#66713 (comment)>,或取消订阅< https://github.com/notifications/unsubscribe-auth/ABJIAI7G2MRTLLDAA3JMSA3Y4ICIFAVCNFSM6AAAAABF3OZMRKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBRG43TQMZSGU >。您收到此邮件是因为您创建了该线程。消息ID:***@***.***>
vddsk6oq4#
关于收集错误处理代码非常严重的覆盖率数据,我理解你的痛苦。在为新的覆盖率代码编写测试时,我也遇到了一些类似的问题,即编写输出新式覆盖率数据文件的代码基本上看起来像
当然,在大多数正常的测试运行中,上述写入操作都不会失败,当然,覆盖的%语句也会反映出这一点。
如果你能以一种允许你注入错误的方式编写代码,那将是我的建议。
一个示例(对于上面的func代码来说效果很好):https://go.googlesource.com/go/+/45b641ce15159e29fa4494b837493042d1e10384/src/runtime/coverage/testdata/harness.go#166
q0qdq0h25#
这是一个#53271的特殊情况。