2011-12-01 135 views
22

我正在寻找一个优化的python测试文件的命名约定,它可以简化不同测试框架(unittest,note,pyunit,...)的使用,并且对这些工具的测试自动发现也很友好。Python中测试文件的最佳命名约定是什么?

我只想要一组明确的需要最少配置的工具。

  • 测试目录名称? testtests
  • 放哪里测试? in module/testdir or module /../ testdir
  • 使用下划线或破折号测试文件名? test_0.py或test-0.py

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

+3

的“ - ”在Python中造成问题,因为它违反了将文件名映射到模块名称的规则。 **从不**使用有效的Python标识符以外的任何东西作为Python文件名的一部分。 –

回答

12

别叫目录test或将与冲突内置test包。

命名约定在PEP 8中定义。请参阅'命名约定'部分。下划线比连字符要好!

包装的布局更灵活一些。我倾向于执行以下操作:

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

这使测试与软件包本身分离。使用setup.py安装软件包只能安装源代码,这可以让人们的口译员保持整洁。这些测试适用于需要它们的开发人员,当他们获得软件包源代码时。

您应该查看The Hitch Hiker's Guide to Packaging以获取关于Python包的更多信息。

+2

谢谢!只有一个子问题:如果我有几个子模块,这意味着我将不得不在同一目录中合并所有测试?或者我应该只将它们移动到像'/ tests/a /'这样的子目录? – bogdan

+1

你可以诚实地以任何方式在这一个。 Django使用我提到的方法,我认为很多至少把它们放在一个地方。但是,Django应用程序的测试遍布全球,我相信很多人也是这样做的。我会倾向于在一个地方散布测试(在源代码内部或外部),但我无法想到一个强有力的论据来给你任何一种方式:) – adamnfish

+3

将测试保存在单独的目录中的参数是完全依赖于美学。我同意@adamnfish关于将它们分开放置在一个反映代码的目录结构中 - 这样人们就可以更容易地找到特定的测试来运行(正如我在开发过程中所做的那样)。但是,如果你很容易改变项目结构(添加和删除模块/文件),你可能会错过更新测试 - 但你会看到失败,所以你会知道! –

1

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

如果您使用nosetest,用来检测测试的理念很简单:

If it looks like a test, it’s a test.

如果您使用py.test,该约定是pretty open too

关于“在哪里把测试”的问题,personnaly,我宁愿存储测试在每个包一个子目录,以确保不要忘了运行/触摸测试,当有人编辑代码;)