使用if __name__ == '__main__':进行测试

10

当你编写一些自给自足的脚本时,使用 if __name__ == '__main__' 作为编写测试的位置是个坏主意吗?

4个回答

6

这取决于您的代码和脚本目的。对于大型和复杂的项目,您肯定需要将所有测试放在单独的位置。

但是,在处理小型项目时,将测试与代码放在一起可能是一个好的解决方案 - 这是doctest的主要思想(它是一个很棒的Python模块,允许您在docstrings中编写测试)。在这种情况下,您的if __name__ == '__main__'将如下所示:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

我觉得它很简洁明了。

5

测试逻辑和测试用例永远不应该成为“生产”代码的一部分(生产可以指您使用的代码,向客户发布的代码等)。因此,在脚本中任何位置都不应该包含它们

理想情况下,应将它们放在单独的文件中。


@MattJoiner 因为这些测试不是用于在生产环境中运行的。它们旨在帮助开发。在用户环境中失败的测试除了破坏应用程序之外,绝对没有任何作用。话虽如此,在生产代码中使用“健全性”断言的合法方法有助于获得早期反馈(即应用程序可以说“嘿,这段代码有问题”,在执行实际到达该代码部分之前)。 - Błażej Michalik

3
最佳实践是将测试放在使用unittest模块的单独单元中。这种分离使您可以保持主要代码的清洁(无需大量测试辅助函数),并鼓励您编写良好的综合测试,因为您不会受到杂乱无章的主要代码的限制。

0

我猜不是,事实上,我看到很多用Python编写的脚本(大多是另一个应用程序的插件)都是这样写的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接