Python单元测试与测试发现

17 投票
4 回答
16800 浏览
提问于 2025-04-17 04:05

我到底需要做些什么才能让Python的unittest正常工作呢?我查了官方文档、StackOverflow上的问题,甚至还试过用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 个回答

3

unittest.main() 会运行所有以 "test" 开头的函数。所以你应该把你的函数重命名。

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

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

我想提一下,你不能把Python单元测试当成可执行的Python文件来运行。比如,我遇到的问题是:

python -m unittest ./TestMyPythonModule.py

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

这样会失败。

但是,下面这个方法就可以:

python -m unittest TestMyPythonModule

一开始很容易忽视这一点。

31

你需要把方法的名字改成以“test”开头。

在这个链接上可以看到相关信息:http://docs.python.org/library/unittest.html :

一个测试用例是通过继承unittest.TestCase来创建的。三个具体的测试是用名字以“test”开头的方法来定义的。这个命名规则告诉测试运行器哪些方法是测试。

撰写回答