我想讓我的Django測試創建和修改媒體文件。所以,就像Django測試數據庫一樣,我想在每次測試運行之前設置一個空的MEDIA_ROOT文件夾。在每個Django測試之前初始化MEDIA_ROOT
我想我會創建一個臨時文件夾並指向它的MEDIA_ROOT。但是,我無法弄清楚在哪裏放置代碼。在this example中,創建了一個特殊的Runner
。亞軍設立了媒體根,並將其撕下。
不幸的是,setup_test_environment
在第一個測試函數運行之前被調用一次,而不是每次運行測試時。
我嘗試創建一個FileSystemTestCase
類,它在其setUp
函數中設置文件系統,並讓我的所有測試用例都來自它。雖然這可行,但它要求每個編寫測試用例的人都記得調用我的setUp
方法,因爲它不會自動調用。
通常我不會爲此煩惱,但忘記調用父級setUp方法的代價可能非常高 - 如果有人忘記了調用並且測試意外地在實時系統上運行,那麼就會發生不好的事情。
編輯:我發現的臨時解決方案是實施我自己的亞軍和基地TestCase
。兩者都設置了一個臨時MEDIA_ROOT,因此如果有人忘記調用我的setUp
方法,測試將運行在上一個測試的臨時文件夾中,或運行器設置的臨時文件夾中。這可能會導致測試失敗,但不會破壞實時數據。
我希望有一個更優雅的解決方案。