【问题标题】:Python unittest and test discoveryPython 单元测试和测试发现
【发布时间】:2011-12-05 09:58:20
【问题描述】:

究竟我需要做什么才能使 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 是一个空文件。 有什么想法吗?

【问题讨论】:

    标签: python unit-testing python-2.7


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      测试函数必须以名称test 开头,所以fooTest 应该是testFoo。请参阅文档here

      另外,不需要__init__.py 文件,假设这是您的tests 目录中仅有的两个文件。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 这对我有用。为了使发现工作(而不是调用 unittest.main()),我必须做的另一件事是将文件从 name_test.py 重命名为 test_name.py
        【解决方案4】:

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

        python -m unittest ./TestMyPythonModule.py
        
        ... (stack trace) ...
        ValueError: Empty module name
        

        失败了。

        但是,这是可行的:

        python -m unittest TestMyPythonModule
        

        一开始很容易被忽视。

        【讨论】:

        • 只是在这里添加我的美分。如果测试模块TestMyPythonModule.py驻留在文件夹tests中,则正确的命令是python -m unittest tests.TestMyPythonModule。有时 IDE 中的集成终端会像 python -m unittest .\tests\TestMyPythonModule 一样自动完成它,但这会产生 Empty module name 错误。
        猜你喜欢
        • 2011-03-18
        • 2020-09-05
        • 2011-08-23
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2011-11-17
        • 2015-06-25
        • 1970-01-01
        相关资源
        最近更新 更多