Python中用于测试的文件的最佳命名规则是什么?

40

我正在寻找一种最佳的命名约定,以便轻松使用不同的测试框架(unittest、note、pyunit等),并且这种约定也对这些工具的测试自动发现友好。

我只想要一组明确的建议,这需要最少的配置工作。

  • 测试目录名称是 test 还是 tests
  • 将测试放在哪里?在模块/测试目录中还是在模块/../测试目录中?
  • 使用下划线还是破折号作为测试文件名分隔符?test_0.py 还是 test-0.py?

我知道,我有太多时间了 :)


5
“-”在Python中会导致问题,因为它违反了将文件名映射到模块名的规则。在Python文件名中,永远不要使用除有效Python标识符以外的任何内容。 - S.Lott
2个回答

25

不要将目录命名为test,否则会与内置的test包发生冲突。

Python命名约定在PEP 8中定义。请参见“命名约定”部分。下划线比连字符更好!

你的包的布局有一定的灵活性。我倾向于按照以下方式操作:

package
|-- package
|  |-- __init__.py
|  `-- <etc>
|-- tests
|  `-- <etc>
|-- setup.py
|-- README
|-- LICENCE
`-- <etc>

这样可以将测试代码与软件包本身分开。使用setup.py安装软件包时,只会安装源代码,这样可以使人们的解释器保持整洁。测试代码适用于需要在获取软件包源代码时进行测试的开发人员。

您可以参考《Python软件包指南》了解更多关于Python软件包的信息。


2
谢谢!只有一个子问题:如果我有几个子模块,这意味着我必须将所有测试组合到同一个目录中吗?还是我只需要将它们移动到子目录中,例如/tests/a/ - bogdan
1
在这个问题上,你可以说两种方法都可以。Django使用我提到的方法,我认为至少有很多人会把它们放在一个地方。然而,Django应用程序的测试分散在各处,我相信也有很多人是这样做的。我倾向于将测试集中在一个地方,而不是分散在各处(无论是在源内还是外部),但我想不出一个强有力的论据来支持你选择哪种方式 :) - adamnfish
3
将测试放在一个单独的目录中的论点完全取决于美学。我同意@adamnfish的观点,将测试放置在与代码相对应的目录结构中,这样更容易让人类找到要运行的特定测试(在开发过程中我经常这样做)。但是,如果您倾向于更改项目结构(添加和删除模块/文件),则可能会错过更新测试 - 但是您将看到失败,因此您会知道! - Kaushik Ghose

2

这取决于您用来运行测试的工具。

如果您正在使用 nosetest,则用于检测测试的哲学非常简单:

如果看起来像测试,那就是测试。

如果您正在使用 py.test,那么约定也 相当开放

关于“将测试放在哪里”的问题,我个人更喜欢将测试存储在每个包的子目录中,以确保在有人编辑代码时不会忘记运行 / 修改测试 ;)


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