Django - 测试模型字段更改

时间:2012-12-28 03:31:56

标签: django unit-testing django-models django-testing

假设模型字段默认为None,并且某个复杂操作后的方法应该将字段更改为None

在测试结束时,我会assertEqual,字段为None,符合预期。如果方法无声地失败并且None不是方法操作的结果而只是巧合,该怎么办?

有没有办法确定模型字段更改,而无需在测试开始时设置不同的值?

在我的情况下,它是来自另一个包的复杂对象的ForeignKey字段。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

这个问题已经开放了很长一段时间,我不确定你是否还需要一个答案,但我昨天在搜索其他东西的时候找到了它,现在我有一些空闲时间,所以......

我不是专家,实际上可能无法满足您的特定需求,但在我看来,您需要一个模拟库。 Michael Foord的Mock是最受欢迎的作品之一。

你可以做的是使用mock.patch作为装饰器或上下文管理器来模拟你试图测试的属性,如下所示:

def test_attribute_is_being_set_to_none():
    mocked_attribute = mock.PropertyMock()
    with mock.patch('MyModule.MyClass.attribute_to_mock', mocked_attribute)
        MyObject = MyClass()
        MyObject.method()

    p.assert_called_with(None)

这应该测试在测试时是否将属性设置为None。如果您想要更加严格,可以使用assert_called_once_with(None)查看对象是否仅在方法期间设置了一次。

你可能会遇到一些麻烦,嘲笑属性,命名空间,使用装饰器或上下文管理器......这取决于很多东西,但我很确定嘲笑是去这里的方法。