让我说我有4个django模型字段我已经以这种方式定制:
# This adds an extra argument 'rs_serial' to the fields that subclass this
#
class RsBaseFieldMixin(models.Field):
def __init__(self, *args, rs_serial=None, rs_arg2=None,.... ,**kwargs):
self.rs_serial = rs_serial
self.rs_arg1 = rs_arg1
self.rs_arg2 = rs_arg2
...
...
super().__init__(*args, **kwargs)
class RsCharField(models.CharField, RsBaseFieldMixin, metaclass=models.SubfieldBase):
pass
class RsDecimalField(models.DecimalField, RsBaseFieldMixin, metaclass=models.SubfieldBase):
pass
class RsIntegerField(models.IntegerField, RsBaseFieldMixin, metaclass=models.SubfieldBase):
pass
class RsBooleanField(models.BooleanField, RsBaseFieldMixin, metaclass=models.SubfieldBase):
pass
Q1 :我测试4个自定义字段,还是只测试mixin?我的猜测是4个字段,因为我想测试功能(如最终结果:我想要一个带有rs_serial参数的小数字段等),而不是实现。
我可以为每个自定义字段类型和每个参数创建单独的测试(这是一个简化的模型,实际上我有很多额外的参数和更多的字段类型)。但我可以创建一个for循环:
class TestFields(TestCase):
for ft in ['RsDecimalField','RsCharField','RsBooleanField', andsoon]:
for arg in ['rs_serial', 'rs_arg2', 'rs_arg3' ... andsoon]:
...
... [ assertEqual(ft.arg, myexpectedvalue) ]
...
Q2 这是一种错误的测试方式吗?如果是,为什么以及应该如何我测试它们?
答案 0 :(得分:0)
在我看来,你需要测试两件事 -
因此,如果你的mixin提供三个操作,你可以在mixin中测试所有三个操作。在经典的TDD意义上,您将确保至少有一个操作在所有继承的类中工作。