断言引发非可调用错误

7 投票
4 回答
1244 浏览
提问于 2025-04-16 00:09

假设我有一个类

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只接受可调用对象进行测试时,我该如何进行测试呢?

4 个回答

2

在Python 3(还有2.7版本)中,你可以使用一个叫做with的结构:

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

这就是代码开始变得优雅的地方……

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

撰写回答