簡體   English   中英

Python 單元測試和測試發現

[英]Python unittest and test discovery

正是我需要做的,使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是一個空文件。 有什么想法嗎?

您需要將方法重命名為以“test”一詞開頭。

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

測試用例是通過子類化 unittest.TestCase 創建的。 這三個單獨的測試是用名稱以字母 test 開頭的方法定義的。 此命名約定通知測試運行器哪些方法代表測試。

我想提一下,你不能像運行一個可執行的 python 文件一樣運行 python 單元測試。 例如,這是我的問題:

python -m unittest ./TestMyPythonModule.py

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

它失敗。

但是,這有效:

python -m unittest TestMyPythonModule

一開始很容易忽略。

unittest.main() 將運行所有以“test”開頭的函數。 所以你應該重命名你的函數

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

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

測試函數必須以名稱test開頭,所以fooTest應該是testFoo 請參閱此處的文檔

此外,也不需要__init__.py文件,假設它們是您的tests目錄中僅有的兩個文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM