假设模型字段默认为None
,并且某个复杂操作之后的方法预计会将该字段更改为None
。Django - 测试模型字段更改
在测试结束时,我按照预期做了assertEqual
并且字段是None
。如果方法失败并且None
不是该方法的结果,而只是一个巧合,该怎么办?
有没有办法确定模型字段的变化,而不必在测试开始时设置不同的值?
在我的情况下,它将是一个ForeignKey
字段从一个复杂的对象从另一个包。
什么是最好的方式去做这件事?
假设模型字段默认为None
,并且某个复杂操作之后的方法预计会将该字段更改为None
。Django - 测试模型字段更改
在测试结束时,我按照预期做了assertEqual
并且字段是None
。如果方法失败并且None
不是该方法的结果,而只是一个巧合,该怎么办?
有没有办法确定模型字段的变化,而不必在测试开始时设置不同的值?
在我的情况下,它将是一个ForeignKey
字段从一个复杂的对象从另一个包。
什么是最好的方式去做这件事?
这个问题已经开了一段时间,我不知道你甚至需要一个答案了,但我发现它,而寻找别的昨天,我得到了现在一些空闲时间,所以...
我不是专家,它可能并不能满足您的特定需求,但在我看来,您需要一个嘲弄的图书馆。 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)
来查看该方法期间是否仅设置了一次对象。
使用装饰器或上下文管理器嘲讽属性,名称空间,这可能会遇到一些麻烦......这取决于很多事情,但我很确定嘲笑是要走到这里的方法。