2010-06-18 7 views
6

कैसे मैं AssertRaises साथ परीक्षण जब AssertRaises केवल अपने परीक्षण के लिए एक प्रतिदेय स्वीकार करता है कि मैं वर्गAssertRaises गैर प्रतिदेय

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) 

देखकर के रूप में इन तरीकों निजी हैं कहो, और मैं नाम के माध्यम से pname तक पहुँचने कर रहा हूँ,?

उत्तर

8

अपना खुद का कॉल करने योग्य बनाएं।

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

अपना खुद का कार्य परिभाषित करें?

class TestRaises(unittest.TestCase): 
    def test_setter(self): 
     def run_test(): 
      c = myClass() 
      c.name = 12 

     self.assertRaises(ValueError, run_test) 
4

पहले। __names के साथ "निजी" विधियों पर समय बर्बाद न करें।

दूसरा। यह करो।

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) 
+0

"निजी" तरीकों पर टिप्पणी के लिए +1 । –

2

अजगर 3 (और 2.7) में आप एक with निर्माण का उपयोग कर सकते हैं:

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

यह वह जगह है थे कोड शुरू होता है हो रही सुंदर ...

संबंधित मुद्दे