【问题标题】:Is using Python modules main function for validation testing a bad idea?使用 Python 模块的主要功能进行验证测试是个坏主意吗?
【发布时间】:2011-11-17 11:45:27
【问题描述】:

我将快速解释我的意思。

我正在使用 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 测试......

【问题讨论】:

    标签: python module batch-file main


    【解决方案1】:

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

    def main(argv=None):
        if argv is None:
            argv = sys.argv
        # etc.
    
    if __name__ == "__main__":
        sys.exit(main() or 0)
    

    这使您可以更灵活地在交互式解释器中使用您的main。 Guido 和其他人here 提供了一些更好的示例。

    【讨论】:

      【解决方案2】:

      就个人而言,我在这些情况下所做的是创建测试用例(尽管这些可以更多地作为集成测试用例,而不仅仅是单元测试用例)。

      因此,通常(在我的工作流程中),这些将是常规测试用例(将实际输出与预期输出进行区分)。虽然可能在一个单独的源文件夹中,它不像单元测试用例那样经常运行。

      将它作为__main__ 的不好之处在于,您必须记住将其作为入口点运行,并且随着项目的发展,您可能会在以后忘记这样做,而且您有很多这样的入口点文件——或者至少有一个调用 main() 的测试用例 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 2014-08-23
        • 2016-05-30
        相关资源
        最近更新 更多