我将快速解释我的意思。
我正在使用 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/