2012-08-02 103 views
1

有两个型号:Django的:在其他单位再利用单元测试,测试

class Model1(models.Model): 
    attribute = models.CharField(max_length=100) 

class Model2(models.Model): 
    target = models.ForeignKey(Model1) 

而且一个单元测试tests.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() 

我想只是调用模型1的测试类中定义的单元测试功能,而不是再次复制代码以测试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() 

但是这似乎并没有工作,我马上发现自己的单元测试框架的内部。我找不到很多这类的东西,所以对于单元测试来说,我觉得我在某个地方做了一个错误的转变。

是否存在重用单元测试的“正常”方法,还是我的方法有缺陷?

回答

2

这实际上只是一个关于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...) 
0

我不建议在另一种测试方法中调用测试方法。
它使混乱,经过一段时间的测试变得不稳定,难以修复或维护。