Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过命令行选项从Python程序运行unittest_Python_Unit Testing_Python 2.7_Software Packaging - Fatal编程技术网

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

通过命令行选项从Python程序运行unittest,python,unit-testing,python-2.7,software-packaging,Python,Unit Testing,Python 2.7,Software Packaging,这是我的设置- project/ __init__.py prog.py test/ __init__.py test_prog.py 我希望能够通过调用prog.py中的命令行选项来运行单元测试。这样,当我部署我的项目时,我可以随时部署运行单元测试的能力 python prog.py --unittest 我需要在prog.py或我的项目的其他部分中做些什么才能让它工作?也许就是您想要的。在test\u prog.py中执行load\

这是我的设置-

project/
    __init__.py
    prog.py
    test/
        __init__.py
        test_prog.py
我希望能够通过调用prog.py中的命令行选项来运行单元测试。这样,当我部署我的项目时,我可以随时部署运行单元测试的能力

python prog.py --unittest
我需要在prog.py或我的项目的其他部分中做些什么才能让它工作?

也许就是您想要的。在
test\u prog.py
中执行
load\u tests
功能,并使用
prog.py
中的以下代码加载和运行测试:

import unittest
import test.test_prog
suite = unittest.TestLoader().loadTestsFromModule(test.test_prog)
unittest.TextTestRunner().run(suite)

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

  • 所有测试都使用相同的前缀命名(
    test\uuu
    是标准),后跟要测试的模块的名称

    prog.py
    =>
    test\u prog.py

  • 测试驻留在
    test/
    目录中

  • 然后你可以这样做:

    prog.py
    我们正在做的是:

    • 检查命令参数以查看是否存在
      --unittest
      (因为这是您希望运行测试的唯一时间)

    • 如果是,那么我们按照我们设置的命名约定创建
      测试_prog.py

    • 然后我们将其传递给
      TestLoader().discover
      函数

      从指定的目录开始,查找与提供的模式匹配的所有测试模块(递归到子目录)

      在本例中,它将在
      test/
      目录中查找名为
      test\u prog.py
      的任何模块。当它这样做时,它加载它并创建一个包含我们想要运行的测试用例的测试套件

    • 最后,我们手动测试
      unittest
      ,以运行在上一步中获得的
      suite


    通常,
    unittest
    将在后台为我们完成所有这些,但是由于我们试图运行一个特定的测试模块,我们必须准确地告诉如何以及从何处获取它


    另外,请注意,您必须对希望执行此操作的每个文件执行此操作。

    Python
    unittest
    模块包含自己的函数,您可以从命令行运行此函数:

    $ python -m unittest discover
    
    要在模块内运行此命令,可以使用
    子流程
    模块:

    #!/usr/bin/env python
    
    import sys
    import subprocess
    
    # ...
    # the rest of your module's code
    # ...
    
    if __name__ == '__main__':
        if '--unittest' in sys.argv:
            subprocess.call([sys.executable, '-m', 'unittest', 'discover'])
    

    如果您的模块有其他命令行选项,您可能希望查看更多高级选项。

    我刚刚删除了文件系统中项目下的
    .idea
    隐藏目录

    我重新启动,重新打开项目,这个问题就解决了

    #!/usr/bin/env python
    
    import sys
    import subprocess
    
    # ...
    # the rest of your module's code
    # ...
    
    if __name__ == '__main__':
        if '--unittest' in sys.argv:
            subprocess.call([sys.executable, '-m', 'unittest', 'discover'])