我以为我会通过验证器测试开始我的测试写作生涯。该 我决定测试的第一个验证器是这样定义的ATExtensions RecordField:
class CoordinateField(RecordField):
""" Stores angle in deg, min, sec, bearing """
security = ClassSecurityInfo()
_properties = RecordField._properties.copy()
_properties.update({
'subfield_validators' : {'degrees':'coordinatevalidator',
'minutes':'coordinatevalidator',
'seconds':'coordinatevalidator',
'bearing':'coordinatevalidator'},
'type' : 'angle',
'subfields' : ('degrees', 'minutes', 'seconds', 'bearing'),
(顺便提一下,关于使用subfield_validators而不是单个字段验证器的原因的一个侧面问题。实际触发的唯一一种Record(s)字段验证是subfield_validator。如果有人有一个如何写的例子对于RecordField本身的一个验证器,请你分享这个秘密吗?不是真正的问题,但也不是很漂亮)
然后,实际测试...
我知道如何测试AT StringField的验证器:
self.assertEqual(instance.schema.get('Keyword').validate(
'XX X', instance),
"Validation failed: 'XX X': is an invalid keyword."
)
同样应该足以测试RecordField:
self.assertEqual(instance.schema.get('Latitude').validate(
{'degrees':'x', 'minutes':'x', 'seconds':'x', 'bearing':'x'}, instance),
"Validation failed: invalid co-ordinates."
)
但我得到一个AttributeError:'dict'对象没有属性'form'
显然验证者需要一个请求。所以我在调试器中徘徊了一段时间,跟随我可以找到的每个validate / validate_validators函数签名(我认为显示我的工作完全没有效率),并且有两个结果之一。
a)语法错误,或 b)验证器未能报告验证失败(仅返回无)。
有没有人得到一个ATExtensions Record(s)字段测试用例的例子,我可以试试?在Products.ATExtensions中没有任何测试,我输了。