Python单元测试和测试发现

时间:2011-10-11 15:18: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()

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

4 个答案:

答案 0 :(得分:29)

您需要将方法重命名为以“test”开头。

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

  

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

答案 1 :(得分:15)

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

python -m unittest ./TestMyPythonModule.py

... (stack trace) ...
ValueError: Empty module name

失败了。

然而,这有效:

python -m unittest TestMyPythonModule

一开始很容易忽视。

答案 2 :(得分:3)

unittest.main()将运行以“test”开头的所有函数。所以你应该重命名你的功能

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

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

答案 3 :(得分:1)

测试函数必须以名称test开头,因此fooTest应为testFoo。请参阅文档here

此外,不需要__init__.py文件,假设这些文件只是tests目录中的两个文件。