Tal*_*iss 4 python unit-testing code-coverage exception-handling runtime-error
我最近遇到了一个简单但令人讨厌的错误.我有一个清单,我想找到其中最小的成员.我使用了Python的内置min().一切都很好,直到在一些奇怪的情况下列表是空的(由于我无法预料的奇怪的用户输入).我的应用程序崩溃了一个ValueError(BTW - 未在官方文档中记录).
我有非常广泛的单元测试,我经常检查覆盖范围,以避免这样的意外.我也使用Pylint(一切都集成在PyDev中),我从不忽略警告,但我没有在用户之前发现这个bug.
我的方法中有什么可以改变以避免这种运行时错误吗?(在Java/C#编译时会被捕获?).
我正在寻找的东西不仅包括我的代码,还有一个很大的尝试 - 除外.我还可以做些什么?有多少其他构建的Python函数隐藏了这样令人讨厌的惊喜?
这里的问题是,格式错误的外部输入导致程序崩溃.解决方案是在代码边界对各种可能的输入方案进行详尽的单元测试.你说你的单元测试是"广泛的",但你显然没有测试过这种可能性.代码覆盖是一个有用的工具,但要记住,覆盖的代码是很重要不一样彻底地测试它.彻底的测试是覆盖使用场景和代码行的组合.
我使用的方法是信任内部呼叫者,但绝不信任外部呼叫者或输入.所以我明确地不对接收外部输入的第一个函数之外的任何代码中的空列表情况进行单元测试.但应该详尽地涵盖该输入功能.
在这种情况下,我认为库的异常是合理的行为 - 请求min空列表是没有意义的.例如,库不能合法地为您设置诸如0的值,因为您可能正在处理负数.
我认为空列表应该永远不会到达要求的代码min- 它应该在输入中被识别,并在那里引发异常,或者如果它对你有用,或者将其设置为0,或者其他什么工作为了你.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |