首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过命令行选项从Python程序运行unittest

通过命令行选项从Python程序运行unittest
EN

Stack Overflow用户
提问于 2013-05-31 18:39:37
回答 3查看 52.6K关注 0票数 39

这是我的装备-

代码语言:javascript
运行
复制
project/
    __init__.py
    prog.py
    test/
        __init__.py
        test_prog.py

我希望能够通过在prog.py中调用命令行选项来运行我的单元测试。这样,当我部署我的项目时,我可以部署在任何时候运行单元测试的能力。

代码语言:javascript
运行
复制
python prog.py --unittest

我在prog.py中需要什么,或者我的其他项目需要什么才能起作用?

EN

Stack Overflow用户

发布于 2013-05-31 21:13:36

您必须确保始终遵循一些命名约定(您似乎正在这样做):

  1. 所有测试都使用相同的前缀命名(test_是标准的),后面跟着要测试的模块的名称。 prog.py => test_prog.py
  2. 测试驻留在test/目录中。

然后你可以做这样的事情:

prog.py

代码语言:javascript
运行
复制
import sys
...
... do module stuff here...
...

if __name__ == "__main__":

    # Check if we want to run the tests for this file
    if "--unittest" in sys.argv:
        import unittest

        test_filename = 'test_' + __file__
        test_directory = 'test'

        suite = unittest.TestLoader().discover(test_directory, pattern=test_filename)
        unittest.TextTestRunner(verbosity=2).run(suite)

我们正在做的是:

  • 检查命令参数以查看是否存在--unittest (因为这是您唯一希望运行测试的时候)。
  • 如果是,那么我们创建test_prog.py -遵循我们设置的命名约定。
  • 然后我们将其传递给TestLoader().discover函数。 发现(.)从指定的目录开始,并找到与所提供的模式匹配的所有测试模块(递归到子目录)。 在我们的示例中,它将查看test/目录中任何名为test_prog.py的模块。当它这样做时,它会加载它,并使用我们想要运行的TestSuite创建一个TestCases。
  • 最后,我们手动测试unittest以运行在前一步中获得的suite

通常,unittest会在后台为我们完成所有这些工作,但是由于我们试图运行一个特定的测试模块,所以我们必须准确地说明如何从哪里获得它。

另外,请注意,您必须为执行此操作--每个文件都要执行此操作。

票数 12
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16863742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档