首页 > 解决方案 > 使用模拟对象测试 Python/Django 模型

问题描述

我正在构建一些我想测试的 Django 模型。我试图避免纯粹为了运行单元测试而创建许多不必要的对象。我认为 unittest.mock 可能对此有所帮助,但我真的很难理解它的操作。所有教程示例似乎都与模拟外部 API 调用有关,这是我认为我理解的一个用例,但我开始认为它可能不适用于我的情况,或者我只是完全误解了它。这是一个典型的模型:

class Foo(models.Model):
    id = models.AutoField(primary_key=True)
    bar = models.ForeignKey(Bar, models.RESTRICT)
     ...other FKs
    baz = models.PositiveIntegerField()
    
    def do_something(self):
        return True if self.baz > 10 else False

我的问题是我想测试 do_something() 但我不想创建一个完整的 Foo 对象,其中包含所有这些 FK 的对象。我希望我能做这样的事情,但很明显我在这个过程中出了点问题。

@patch('models.foo.Foo')   
class FooTestCase(TestCase):
 
    def test_foo_do_something(self, foo):
        f = foo() 
        f.baz = 20
        self.assertTrue(f.do_something())

谁能告诉我哪里出错了?

标签: pythondjangomocking

解决方案


推荐阅读