2013-07-11 19 views
7

ho copiato pari pari da questo python.org unittest documentazione:pitone unittest 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() 

Ma ottengo questo messaggio di errore in pitone 2.7.2 [GCC 4.1.2 20.080.704 (Red Hat 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) 

Come posso ottenere assertRaises() per funzionare correttamente?

+0

Il codice sopra funziona perfettamente con Arch - Python 2.7.5. Aggiorna il tuo python? – korylprince

+0

Vedere http://stackoverflow.com/help/someone-answers. – alecxe

risposta

6

Verificare che si stia utilizzando 2.7 python.

testata utilizzando 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

"Modificato nella versione 2.7: aggiunta la possibilità di utilizzare assertRaises() come gestore del contesto." Secondo [manuale di python] (http://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises). – charmoniumQ

6

La possibilità di utilizzare unittest.TestCase.AssertRaises() come contesto responsabile è stato aggiunto in Python 2.7.