python - 使用 Python 模块 main 函数进行验证测试是一个坏主意吗?

标签 python module batch-file program-entry-point

我将快速解释我的意思。

我正在使用 python 开发一个项目,其中有多个模块执行部分工作。举例来说,我有一个名为 Parser.py 的模块,该模块有一个函数 parseFile(),我的主模块 Main.py 调用该函数为了解析一些文件。

到目前为止,我正在 Parser.py 中使用 main 方法

if __name__ == "__main__":
    line_list = parseFile(sys.argv[1])

    out_file = open(sys.argv[2], "w")
    for i in range(len(line_list)):
        out_file.write(line_list[i].get_string(True))

解析具体做什么并不重要,重要的是如果你调用它,第一个参数将是解析的输入文件,第二个参数是解析的输出文件。

所以,我本质上所做的就是使用批处理文件通过典型的输入、输出、基线系统来验证解析器的结果......

ECHO Set the test, source, input, output and baseline directories
set TESTDIR=%CD%
set SRCDIR=%CD%\..\pypro\src
set INDIR=%CD%\input
set OUTDIR=%CD%\output
set BASEDIR=%CD%\baseline


:: Parser.py main method is base for unit testing on parsing
ECHO Begin Parser testing
cd %INDIR%\Parser
FOR %%G IN (*.psma) DO %SRCDIR%\Parser.py %%G %OUTDIR%\Parser\%%G
ECHO Parser testing complete

cd %TESTDIR%

"C:\Program Files\WinMerge\winmergeU.exe" "%OUTDIR%"  "%BASEDIR%" 

正如您所看到的,它将结果与基线进行比较,因此,如果有任何更改,程序员就知道它不再有效,或者要求是错误的。

这个方法有什么问题吗?我这样做是因为这很容易。我的计划是继续使用尽可能多的有效且有意义的模块来执行此操作,以及 pydev 内的一套 pyunit 测试...

最佳答案

我认为这是一个好主意,而且它似乎确实是 if __name__ == '__main__' 构造的常见用例。虽然这是一个更常见的结构:

def main(argv=None):
    if argv is None:
        argv = sys.argv
    # etc.

if __name__ == "__main__":
    sys.exit(main() or 0)

这为您提供了在交互式解释器中使用 main 的额外灵 active 。 Guido 和其他人提供了一些更好的例子 here

关于python - 使用 Python 模块 main 函数进行验证测试是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424690/

相关文章:

c# - 研究使用 C# 在目录及其子目录中高效搜索文本

python - 导入错误 : No module named stack

python - Seaborn 图为 x 轴时间戳标签添加了额外的零

python - Python 的方式是什么来表达在 XML 文档中根据需要创建尽可能多的标签的 GREL 行?

node.js - Node 导出模块未知控制台日志 "undefined"

windows - 从 ipconfig 获取 MAC 和 DHCP 服务器

python - 在 Python 中禁用 subprocess.Popen 的控制台输出

python - PTVS:如何在一个项目中从另一个项目中引用或使用 Python 源代码

haskell - 重命名当前模块

java - 将列表作为批处理文件中的参数传递