Steve Schulist
Steve Schulist

Reputation: 991

python unittest assertRaises

I copied this verbatim from python.org unittest documentation:

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()

But I get this error message from python 2.7.2 [GCC 4.1.2 20080704 (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)

How can I get assertRaises() to work properly?

Upvotes: 8

Views: 7239

Answers (3)

Cory Klein
Cory Klein

Reputation: 55660

If you're using 2.7 and still seeing this issue, it could be because you're not using python's unittest module. Some other modules like twisted provide assertRaises and though they try to maintain compatibility with python's unittest, your particular version of that module may be out of date.

Upvotes: 1

Bastien Semene
Bastien Semene

Reputation: 607

The ability to use unittest.TestCase.AssertRaises() as context manager was added in python 2.7. http://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises

Upvotes: 7

alecxe
alecxe

Reputation: 473853

Check that you are really using 2.7 python.

Tested using 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)

Upvotes: 5

Related Questions