我做了一个名为演示的小项目,里面只有一个测试
import unittest
class Test(unittest.TestCase):
def testName1(self):
self.assertEqual(5+9, 14)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()
但是,从命令行
ThinkPad-T520:~/workspacep/demo$ python -m unittest
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
为什么这行不通?通常,如何在命令行中用一行来运行所有单元测试?
目录的结构是
demo
tests
demo_test1.py __init__.py
答案 0 :(得分:3)
前一阵子我也遇到了同样的问题,并使用测试发现命令解决了这个问题。
python -m unittest discover -s .
您也可以传入测试文件模式以及其他所有选项https://docs.python.org/2/library/unittest.html#test-discovery
答案 1 :(得分:1)
您需要传递list of modules。
例如,如果您的测试文件是foo.py
,则可以运行python -m unittest foo
。
答案 2 :(得分:0)
对我来说(从Intellij运行测试),我必须删除该类的“运行配置”。早些时候,我错误地将单元测试导入为_pytest.unittest并运行了测试类。当然那没用。我更正了模块导入,但是“运行配置”仍然存在,导致它作为Python脚本而不是“ Python测试”运行。
答案 3 :(得分:0)
我知道三个陷阱:
test_*
test*.py
(默认情况下,您可以在运行测试时使用-p
标志对其进行更改)。例如test_demo1.py
tests
文件夹中必须有一个__init__.py
文件,否则它将不会被视为导入的有效位置。因此,对于#1,您需要将测试重命名为test_name_1
。对于#2,有两种选择:
A -像这样重组文件:
demo
tests
__init__.py
test_demo1.py
然后运行python -m unittest
,它应该找到测试用例。
B -像这样运行:python -m unittest discover -p *test.py