3

有两种型号:

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()

我只想调用在 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()

但这似乎不起作用,我立即发现自己处于单元测试框架的内部。我找不到很多关于这类事情的参考资料,所以作为单元测试的新手,我觉得我在某个地方走错了路。

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

4

2 回答 2

3

这实际上只是一个关于 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...)
于 2012-08-02T14:46:32.730 回答
0

我不建议在另一个测试方法中调用测试方法。
它会造成混乱,一段时间后测试变得不稳定,更难修复或维护。

于 2012-08-02T19:29:00.690 回答