Python单元测试和测试发现

Raf*_*aim 15 python unit-testing python-2.7

什么正是我需要做的,使Python的unittest工作?我检查了官方文档,SO问题,甚至尝试使用nose,但到目前为止没有任何工作.我做错了什么?

bash:~/path/to/project/src/tests$ ls -l
total 8
-rw-r--r-- 1 myuser myuser 342 Out 11 11:51 echo_test.py
-rw-r--r-- 1 myuser myuser  71 Out 11 11:28 __init__.py
bash:~/path/to/project/src/tests$ python -m unittest -v echo_test

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
bash:~/path/to/project/src/tests$ python -m unittest discover

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
bash:~/path/to/project/src/tests$ cat echo_test.py
import unittest

class EchoTest(unittest.TestCase):  
    def fooTest(self):
        self.assertTrue(1==1)

    def barTest(self):
        self.assertTrue(1==2)

#suite = unittest.TestLoader().loadTestsFromTestCase(TestEcho)
#unittest.TextTestRunner(verbosity=2).run(suite)

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,测试只是没有运行,我不知道为什么(因为我不是python程序员).仅供参考,我使用的__init__.py是python 2.7,它是一个空文件.有什么想法吗?

Chr*_*ley 29

您需要将方法重命名为以"test"开头.

http://docs.python.org/library/unittest.html所示:

通过继承unittest.TestCase创建一个测试用例.使用名称以字母test开头的方法定义三个单独的测试.此命名约定通知测试运行器哪些方法代表测试.


Nuc*_*eon 18

我想提一下,你不能运行python单元测试,好像它是一个可执行的python文件.例如,这是我的问题:

python -m unittest ./TestMyPythonModule.py

... (stack trace) ...
ValueError: Empty module name
Run Code Online (Sandbox Code Playgroud)

它失败.

但是,这有效:

python -m unittest TestMyPythonModule
Run Code Online (Sandbox Code Playgroud)

一开始很容易忽视.

  • 只是为了在这里添加我的美分。如果测试模块 `TestMyPythonModule.py` 位于文件夹 `tests` 中,则正确的命令是 `python -m unittesttests.TestMyPythonModule`。有时,IDE 中的集成终端会自动完成它,例如“python -m unittest .\tests\TestMyPythonModule”,但这会产生“空模块名称”错误。 (2认同)