AssertRaises不可调用

时间:2010-06-18 20:53:13

标签: python unit-testing

说我有班级

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进行测试?

4 个答案:

答案 0 :(得分:9)

让自己可以调用。

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

答案 1 :(得分: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 )

答案 2 :(得分:2)

在Python 3(和2.7)中,您可以使用with构造:

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

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

答案 3 :(得分:0)

定义自己的功能?

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

        self.assertRaises(ValueError, run_test)