我對django和單元測試都很陌生,我試圖爲我的模型構建單元測試,但一直有一些困難。Django中的單元測試緊耦合模型
我有好幾個型號密切合作:
Resource
,這將維持一個文件資源
MetadataField
代表可以添加到資源元數據字段,對應於全域的表
MetadataValue
匹配具有資源ID和對應值的MetadataField ID,這是資源 - MetadataField多對多關係的中間表
MetadataSchema
表示由許多MetadataFields
組成的模式。每個Resource
被分配一個MetadataSchema
它控制MetadataFields
它是由
關係表示:
Resource - MetadataField : Many-to-Many through MetadataValue
MetadataValue - MetadataSchema : Many-to-Many
Resource - MetadataSchema : One-to-Many
我不知道如何編寫測試來處理這些模型。 Test Driven Django教程中的模型測試似乎主要包括初始化對象和驗證屬性。如果我設置了這些對象,但需要使用所有其他對象,那麼測試將依賴於他們不打算測試的代碼。 例如如果我想創建一個資源,我也應該爲它分配一個元數據模式和該模式中字段的值。我已經在django中查找了單元測試模型的好例子,但一直沒有找到任何東西(django網站似乎沒有單元測試,並且these projects都有差或缺少測試或者一對夫婦的情況下,具有良好的測試,但使用的幾乎沒有車型
下面是我看到了可能的方法:
- 做了很多的嘲諷,以確保我永遠只測試一個類,並保持對模型進行單元測試非常簡單,只測試他們的方法/屬性,但不測試關係是否正常工作,然後依靠o n更高級別的集成測試,以解決關係中的任何問題等。
- 設計單位測試表明DO依賴於其他功能,並且接受一個功能中的中斷將打破多個測試,前提是可以很容易地看到發生故障。所以我可能會有一種方法測試我是否可以成功地將
MetadataValue
添加到資源,這將需要設置至少一個MetadataSchema
和Resource
。然後,我可以使用try - except
塊來確保如果測試在斷言處理我實際上要測試的內容之前失敗,它會給出一個特定的錯誤消息,提示錯誤在別處。這樣我可以快速掃描多個失敗的測試消息,找到真正的罪魁禍首。在每次測試中都不可能做到這種可靠分離
我不知道這一切是否合理,但如果有的話對於這種情況的最佳實踐,請將我指向他們!謝謝
通常,如果單元測試太難寫了,可能會指出設計過於複雜。例如,我不確定我看到MetaDataField的價值?不能每個MetaDataValue表都有一個用於資源和值的列。然後,您將爲每種類型的元數據創建一個表格。這更清楚一點,不太古怪。取決於您預測當然會有多少種不同類型的元數據。 – aychedee