Django:在其他单元测试中重用单元测试
有两种型号:Django:在其他单元测试中重用单元测试,django,unit-testing,Django,Unit Testing,有两种型号: class Model1(models.Model): attribute = models.CharField(max_length=100) class Model2(models.Model): target = models.ForeignKey(Model1) 和一个unittesttests.py: class Model1Test(TestCase): def test_make_new_model_and_save():
class Model1(models.Model):
attribute = models.CharField(max_length=100)
class Model2(models.Model):
target = models.ForeignKey(Model1)
和一个unittesttests.py
:
class Model1Test(TestCase):
def test_make_new_model_and_save():
m = Model1()
m.attribute = 'test values'
m.save()
class Model2Test(TestCase):
def test_make_new_model_and_save():
# Make new Model1 to FK to
m = Model1()
m.attribute = 'test values'
m.save()
m2 = Model2()
m2.target = m
m2.save()
我只想调用Model1的测试类中定义的unittest函数,而不是为了测试Model2而再次复制代码。我想象这是这样的:
class Model1Test(TestCase):
def test_make_new_model_and_save():
m = Model1()
m.attribute = 'test values'
m.save()
return m
class Model2Test(TestCase):
def test_make_new_model_and_save():
# Make new Model1 to FK to
m = Model1Test('test_make_new_model_and_save')
m2 = Model2()
m2.target = m
m2.save()
但这似乎不起作用,我立即发现自己置身于单元测试框架的内部。我找不到很多关于这类事情的参考文献,所以作为单元测试的新手,我觉得我在某个地方走错了方向
是否存在重用单元测试的“正常”方法,或者我的方法有缺陷?这实际上只是一个关于Python中对象和类的问题。答案是定义一个包含所需初始化代码的公共超类,从中继承Model1Test和Model2Test,并从两者调用它
class CommonSetUp(TestCase):
def make_new_model_and_save():
m = Model1()
m.attribute = 'test values'
m.save()
return m
class Model2Test(CommonSetUp):
def test_make_new_model_and_save():
self.make_new_model_and_save()
self.assertTrue(...your assertions here...)
class Model2Test(CommonSetUp):
def test_make_new_model_and_save():
self.make_new_model_and_save()
m2 = Model2()
m2.target = m
m2.save()
self.assertTrue(...your assertions here...)
我不建议在另一个测试方法中调用测试方法。
它会造成混乱,一段时间后,测试变得不稳定,更难修复或维护