2010-06-18 59 views
6

说我有类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,我怎么跟AssertRaises测试时AssertRaises只接受其测试可调用?

回答

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对 “私” 的方法评论。 – 2010-06-18 21:14:05

2

在Python 3(2.7),你可以使用一个with建设:

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

这是代码开始变得美丽......