说我有班级
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进行测试?
答案 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)