断言引发非可调用错误
假设我有一个类
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)