2012-12-28 76 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)來查看該方法期間是否僅設置了一次對象。

使用裝飾器或上下文管理器嘲諷屬性,名稱空間,這可能會遇到一些麻煩......這取決於很多事情,但我很確定嘲笑是要走到這裏的方法。