2012-10-04 84 views
0

以下超級簡單單元測試在python2.7下運行正常,但在2.6中給出了以下錯誤 「no method runTest()」,爲什麼?python單元測試怪異問題

謝謝! 陽

[email protected] /tmp $ python26 -m unittest a.AA 
Traceback (most recent call last): 
    File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code 
    exec code in run_globals 
    File "/usr/lib64/python2.6/unittest.py", line 874, in <module> 
    main(module=None) 
    File "/usr/lib64/python2.6/unittest.py", line 815, in __init__ 
    self.parseArgs(argv) 
    File "/usr/lib64/python2.6/unittest.py", line 842, in parseArgs 
    self.createTests() 
    File "/usr/lib64/python2.6/unittest.py", line 848, in createTests 
    self.module) 
    File "/usr/lib64/python2.6/unittest.py", line 612, in loadTestsFromNames 
    suites = [self.loadTestsFromName(name, module) for name in names] 
    File "/usr/lib64/python2.6/unittest.py", line 597, in loadTestsFromName 
    test = obj() 
    File "/usr/lib64/python2.6/unittest.py", line 215, in __init__ 
    (self.__class__, methodName) 
ValueError: no such test method in <class 'a.AA'>: runTest 
[email protected] /tmp $ vi a.py 
[email protected] /tmp $ cat a.py 
import unittest 

class AA(unittest.TestCase): 
    pass 

回答

0

您必須覆蓋runTest功能在你的類。

或者名爲test_something的函數,單元測試可以理解爲測試函數。當你想要執行一連串的測試時,這很有用,因爲你可以提供setUp和tearDown,它們是在每次測試之前調用的函數,用於創建你測試中需要的類或者東西。

+0

謝謝,但是文檔http://docs.python.org/release/2.6.6/library/unittest.html#basic-example中的第一個簡單示例沒有runTest()覆蓋? –

+0

由於它實現了名爲test_something的函數,因此單元測試可以理解爲測試函數。 – tomahh

+0

我添加了一個test_blah()測試,還是一樣 進口單元測試 AA級(unittest.TestCase生成): 高清test_blah(個體經營): 的assertEquals(1,1, 'SIMPL') –

0

它工作在2.7而不是在2.6的原因發現正確in the documentation

它說

改變在2.7版:在早期版本中它只是可以運行獨立的測試方法,而不是模塊或類。

您正試圖在整個班級中運行所有測試AA。你不能在2.6中做到這一點。您可以在代碼底部撥打unittest.main(),然後通過python a.py從命令行運行腳本。

$ cat a.py 
import unittest 

class AA(unittest.TestCase): 
    def test_something(self): 
     self.assertEqual(1, 1) 

unittest.main() 

$ python -V 
Python 2.6.1 
$ python a.py 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

您也可能希望將電話衛隊unittest.main(),以確保如果運行在命令行這個文件時,它纔會被調用。