2012-12-28 75 views
1

假设模型字段默认为None,并且某个复杂操作之后的方法预计会将该字段更改为NoneDjango - 测试模型字段更改

在测试结束时,我按照预期做了assertEqual并且字段是None。如果方法失败并且None不是该方法的结果,而只是一个巧合,该怎么办?

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

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

什么是最好的方式去做这件事?

回答

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

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