在我们的团队中,我们像这样定义大多数测试用例:

一个“框架”类ourtcfw.py:

import unittest

class OurTcFw(unittest.TestCase):
    def setUp:
        # Something

    # Other stuff that we want to use everywhere

还有很多测试用例,比如testMyCase.py:

import localweather

class MyCase(OurTcFw):

    def testItIsSunny(self):
        self.assertTrue(localweather.sunny)

    def testItIsHot(self):
        self.assertTrue(localweather.temperature > 20)

if __name__ == "__main__":
    unittest.main()

当我在编写新的测试代码并希望经常运行它以节省时间时,我确实会在所有其他测试前面加上“__”。但它很麻烦,让我无法专心编写代码,而且它所产生的提交噪音非常烦人。

因此,例如,当对testItIsHot()进行更改时,我希望能够这样做:

$ python testMyCase.py testItIsHot

并且让单元测试只运行testtishot ()

我怎样才能做到呢?

我试图重写if __name__ == "__main__":部分,但由于我是Python新手,我感到迷失,并继续猛冲到方法以外的所有东西。


当前回答

如果您想只运行来自特定类的测试:

if __name__ == "__main__":
    unittest.main(MyCase())

它在Python 3.6中为我工作。

其他回答

如果您想只运行来自特定类的测试:

if __name__ == "__main__":
    unittest.main(MyCase())

它在Python 3.6中为我工作。

如果你查看unittest模块的帮助,它会告诉你一些组合,允许你从一个模块运行测试用例类,从一个测试用例类运行测试方法。

python3 -m unittest -h

[...]

Examples:
  python3 -m unittest test_module               - run tests from test_module
  python3 -m unittest module.TestClass          - run tests from module.TestClass
  python3 -m unittest module.Class.test_method  - run specified test method
```lang-none

It does not require you to define a `unittest.main()` as the default behaviour of your module.

如果你想直接从脚本(例如,从jupyter笔记本)运行测试,你可以这样做,只运行一个测试:

from testMyCase import MyCase
unittest.main(argv=['ignored', '-v', 'MyCase.testItIsHot'], exit=False)

对我有用的是:

cd project_dir
python -m unittest -v path\to\test\testMyCase.py -k my_test_name

-v用于unittest详细日志输出。

这就像你建议的那样-你只需要指定类名:

python testMyCase.py MyCase.testItIsHot