2013-07-11 169 views
7

我複製此逐字從python.org單元測試文檔:蟒蛇單元測試assertRaises

import random 
import unittest 

class TestSequenceFunctions(unittest.TestCase): 

    def setUp(self): 
     self.seq = range(10) 

    def test_shuffle(self): 
     # make sure the shuffled sequence does not lose any elements 
     random.shuffle(self.seq) 
     self.seq.sort() 
     self.assertEqual(self.seq, range(10)) 

     # should raise an exception for an immutable sequence 
     self.assertRaises(TypeError, random.shuffle, (1,2,3)) 

    def test_choice(self): 
     element = random.choice(self.seq) 
     self.assertTrue(element in self.seq) 

    def test_sample(self): 
     with self.assertRaises(ValueError): 
      random.sample(self.seq, 20) 
     for element in random.sample(self.seq, 5): 
      self.assertTrue(element in self.seq) 

if __name__ == '__main__': 
    unittest.main() 

但我得到的Python 2.7.2 [GCC 4.1.2 20080704(紅帽4.1.2-51)此錯誤信息] on linux2:

.E. 
====================================================================== 
ERROR: test_sample (__main__.TestSequenceFunctions) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "tmp.py", line 23, in test_sample 
    with self.assertRaises(ValueError): 
TypeError: failUnlessRaises() takes at least 3 arguments (2 given) 

---------------------------------------------------------------------- 
Ran 3 tests in 0.001s 

FAILED (errors=1) 

我怎樣才能讓assertRaises()正常工作?

+0

上面的代碼在Arch-Python 2.7.5上正常工作。升級你的python? – korylprince

+0

請參閱http://stackoverflow.com/help/someone-answers。 – alecxe

回答

6

檢查你確實在使用2.7 python。

使用pythonbrew測試:

$ pythonbrew use 2.7.2 
$ python test.py 
... 
---------------------------------------------------------------------- 
Ran 3 tests in 0.000s 

OK 
$ pythonbrew use 2.6.5 
$ python test.py 
.E. 
====================================================================== 
ERROR: test_sample (__main__.TestSequenceFunctions) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "test.py", line 23, in test_sample 
    with self.assertRaises(ValueError): 
TypeError: failUnlessRaises() takes at least 3 arguments (2 given) 

---------------------------------------------------------------------- 
Ran 3 tests in 0.000s 

FAILED (errors=1) 
+0

「版本2.7中的更改:增加了將assertRaises()用作上下文管理器的功能。」根據[python手冊](http://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises)。 – charmoniumQ