我正在尝试编写一个类来传递以下unittest:
import unittest
from property_address import *
class TestAddresses(unittest.TestCase):
def setUp(self):
self.home = Address( name='Steve Holden', street_address='1972 Flying Circus', city='Arlington', state='VA', zip_code='12345' )
def test_name(self):
self.assertEqual(self.home.name, 'Steve Holden')
self.assertRaises(AttributeError, setattr, self.home, 'name', 'Daniel Greenfeld')
def test_state(self):
self.assertEqual(self.home.state, 'VA')
self.assertRaises(StateError, setattr, self.home, 'state', 'Not a state')
self.home.state = 'CO'
self.assertEqual(self.home.state, 'CO')
我遇到问题的部分是self.assertRaises(StateError,setattr,self.home,'state','Not a state')
我似乎无法获得引发的StatError。
我使用的代码是:
class Address(object):
states = ['IA', 'KS', 'UT', 'VA', 'NC', 'NE', 'SD', 'AL', 'ID', 'FM', 'DE', 'AK', 'CT', 'PR', 'NM', 'MS', 'PW', 'CO', 'NJ', 'FL', 'MN',
'VI', 'NV', 'AZ', 'WI', 'ND', 'PA', 'OK', 'KY', 'RI', 'NH', 'MO', 'ME', 'VT', 'GA', 'GU', 'AS', 'NY', 'CA', 'HI', 'IL', 'TN',
'MA', 'OH', 'MD', 'MI', 'WY', 'WA', 'OR', 'MH', 'SC', 'IN', 'LA', 'MP', 'DC', 'MT', 'AR', 'WV', 'TX']
def __init__(self,name, street_address, city, state, zip_code):
self._name = name
self._street_address = street_address
self._city = city
self._state = state
self._zip_code = zip_code
@property
def name(self):
return self._name.title()
@property
def state(self):
return self._state
@state.setter
def state(self,value):
if value in self.states:
self._state = value
else:
raise ### This is where I am stuck
我是否需要为StateError创建一个新的@property,或者我应该以某种方式将其用于状态def。
答案 0 :(得分:2)
你需要提出StateError
例外;这就是全部:
@state.setter
def state(self,value):
if value not in self.states:
raise StateError(value)
self._state = value
这确实要求您首先定义异常类,当然:
class StateError(Exception):
"""Invalid state value used"""
演示:
>>> class StateError(Exception): pass
...
>>> class Address(object):
... states = ['IA', 'KS', 'UT', 'VA', 'NC', 'NE', 'SD', 'AL', 'ID', 'FM', 'DE', 'AK', 'CT', 'PR', 'NM', 'MS', 'PW', 'CO', 'NJ', 'FL', 'MN',
... 'VI', 'NV', 'AZ', 'WI', 'ND', 'PA', 'OK', 'KY', 'RI', 'NH', 'MO', 'ME', 'VT', 'GA', 'GU', 'AS', 'NY', 'CA', 'HI', 'IL', 'TN',
... 'MA', 'OH', 'MD', 'MI', 'WY', 'WA', 'OR', 'MH', 'SC', 'IN', 'LA', 'MP', 'DC', 'MT', 'AR', 'WV', 'TX']... @property
... def state(self):
... return self._state
... @state.setter
... def state(self,value):
... if value not in self.states:
... raise StateError(value)
... self._state = value
...
>>> a = Address()
>>> a.state = 'VA'
>>> a.state = 'Nonesuch'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 11, in state
__main__.StateError: Nonesuch