Python单元测试与测试发现
我到底需要做些什么才能让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”开头的方法来定义的。这个命名规则告诉测试运行器哪些方法是测试。