前提
我来自Lua脚本语言,我接触过Java编程语言,这是我用来学习算法的第四版。(参考)。
在Java中,我已经习惯于看到每个文件一个类,使用main()方法测试和展示类‘API’的正确用法。
现在,我正在转向Python 3,在我看来,它似乎是前两个世界的模糊合并。
电流设置
我已经开始开发一个项目:一个主脚本和一个包含几个类的文件夹集合(Python的模块)。正如我所习惯的那样,每个类都有自己的测试和使用示例,它们运行if __name__ == '__main__',即模块作为脚本运行(参考)。
输入Python3绝对import语句。现在我有麻烦了。特定模块可能需要从project_root.utilis访问函数。在我的IDE (PyCharm)中,我可以简单地执行from utils import blah,但这是不好的,因为它在我已安装的模块中看起来很坚固,然后在我的当前项目中。此外,如果我从终端运行我的模块,它甚至不能工作。最后我在某个子文件夹中连接了函数utils/blah.py .
现在我意识到必须有其他测试和文档化标准,但是我喜欢在模块本身中保留一个模块的示例,这样我们就知道如何使用它了。我相信我不是第一个使用这种工作流的人。
问题
有人能向我解释一下,用可以在同一个文件中运行的测试示例来记录一个模块的最佳实践是什么?
建议的替代方案是什么?
后来的调查结果
我刚刚发现,在我的IDE中,本地模块优先于已安装模块(我认为默认情况下不应该发生这种情况)。不过,我不知道为什么会这样。
要以脚本的形式运行我的模块,我可以从project_root python -m module_dir.module_name。至少我可以移除系统链接。
发布于 2017-02-18 23:45:47
最好的办法显然是意见问题。因此,我将列出一些解决方案,在我的排名从最差到最好。
在__main__中进行测试当然是一种方法。但是,您必须自己编写测试框架(例如,报告已通过和失败的测试)。而且很可能测试将超过模块代码。在这种情况下,我觉得把它们留在模块里是不对的。
Python附带了单位测试模块。它是Java的JUnit端口。它非常冗长;您必须显式地为测试编写类。我想,这就是Java风格。不太像琵琶,海事组织。
从文档字符串中提取测试的博士考试模块也是标准库的一部分。一个优点是,文档字符串执行双重任务;既作为测试,也作为示例。
吡喃测试框架要好得多。它将自动搜索和运行多种测试。 (包括docstring测试)。这当然是我最喜欢的测试解决方案。
https://stackoverflow.com/questions/42321625
复制相似问题