1

假设模型字段默认为None,并且经过一些复杂操作后的方法预计将字段更改为None

在测试结束时,我做到了assertEqual,并且该领域None符合预期。如果该方法无声无息地失败并且None不是该方法操作的结果而仅仅是巧合怎么办?

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

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

解决此问题的最佳方法是什么?

4

1 回答 1

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)来查看对象是否在方法期间只设置了一次。

您可能会在模拟属性、命名空间、使用装饰器或上下文管理器时遇到一些麻烦……这取决于很多事情,但我很确定模拟是这里的方法。

于 2013-03-28T14:08:19.360 回答