ATExtensions Record(s)字段 - 验证器和验证器测试

时间:2012-01-08 00:07:35

标签: plone

我以为我会通过验证器测试开始我的测试写作生涯。该 我决定测试的第一个验证器是这样定义的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中没有任何测试,我输了。

0 个答案:

没有答案