AssertRaises not callable

Say I have a class

class myClass(object): pname = "" def __getName(self): return pname def __setName(self, newname): if not isalpha(newname): raise ValueError("Error") elif self.pname = newname name = property(fget=__getName,fset=__setName) 

Seeing that these methods are private and I access the name pname through the name, how can I check with AssertRaises when AssertRaises only accepts the called for its test?

+6
python unit-testing
source share
4 answers

Make your own challenge.

 class TestMyClass(unittest.TestCase): def test_should_raise(self): x = myClass() def assign_bad_name(): x.name = "7" self.assertRaises(ValueError, assign_bad_name) 
+8
source share

At first. Please do not waste time on "private" methods with __names .

Secondly. Do it.

 class TestMyClass( unittest.TestCase ): def setUp( self ): self.myclass= MyClass() def test_setName_should_fail( self ): try: self.myclass.name = 232 self.fail( "Should have raised an exception" ) except ValueError, e: self.assertEquals( "Error", e.msg ) 
+4
source share

In Python 3 (and 2.7), you can use the with construct:

 class TestMyClass(unittest.TestCase): def test_should_raise(self): x = myClass() with self.assertRaises(ValueError): x.name = "7" 

This code starts to become beautiful ...

+2
source share

Define your own function?

 class TestRaises(unittest.TestCase): def test_setter(self): def run_test(): c = myClass() c.name = 12 self.assertRaises(ValueError, run_test) 
0
source share

All Articles