2013-07-11 24 views
7

Ich kopierte diese wörtlich aus python.org Unittest Dokumentation:Python 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() 

Aber ich bekomme diese Fehlermeldung von Python 2.7.2 [GCC 4.1.2 20.080.704 (Red Hat 4.1.2-51) ] auf 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) 

Wie kann ich richtig assertRaises() zur Arbeit?

+0

Der obige Code funktioniert gut auf Arch - Python 2.7.5. Aktualisieren Sie Ihre Python? – korylprince

+0

Bitte lesen Sie http://stackoverflow.com/help/someone-answers. – alecxe

Antwort

6

Überprüfen Sie, dass Sie wirklich 2,7 Python verwenden.

Geprüft pythonbrew mit:

$ 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

"Geändert in Version 2.7: Hinzugefügt die Fähigkeit, assertRaises() als Kontextmanager zu verwenden." Nach [Python-Handbuch] (http://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises). – charmoniumQ