我想寫很好我已經創建的REST API的單元測試。我有這樣的簡單結構:GO單元測試結構化REST API項目
ROOT/
config/
handlers/
lib/
models/
router/
main.go
config
包含JSON配置和一個簡單的config.go
讀取和解析JSON文件,填補了Config
結構。 handlers
包含控制器(即,在router/routes.go
中描述的相應METHOD + URL的處理程序)。 lib
包含一些數據庫,請求響應器和記錄器邏輯。 models
包含要從JSON和DB映射的結構和它們的funcs。最後router
包含路由器和路由定義。
現在我在GO中搜索和閱讀了很多關於單元測試REST API的文章,並且發現了或多或少令人滿意的關於如何設置測試服務器,定義路由和測試請求的文章。一切都好。 但只有當你想測試一個文件!
我現在的問題是如何爲所有處理程序設置測試環境(服務器,路線,數據庫連接)?發現here(我發現很容易理解和實現)的方法我有一個問題:或者我必須爲每個處理程序分別運行測試或我必須在一個測試文件中爲所有處理程序編寫測試套件 。我相信你明白,這兩種情況都不是很高興(第一,因爲我需要保持運行go test
運行所有測試成功和第二,因爲有一個測試文件覆蓋所有處理函數將變得無法維護)。
現在我成功了(根據the linked article),只是我把所有的測試和初始化代碼放入一個func文件中,但我不喜歡這種方法。
我想達成什麼是那種setUp()
或init()
與第一觸發測試運行一次完成所有必需的變量全局可見,初始化,所有接下來的測試可能已經再次同時確保使用它們,而不需要實例化他們的這個設置文件僅編譯測試...
我不確定這是否完全清楚,或者如果這種問題需要一些代碼示例(除了什麼是already linked in the article,但我會添加任何你認爲是必需的,只是告訴我!
爲什麼不可能在init函數中爲您的測試執行所有設置? – Machiel
@Machiel如果我有一個init函數來設置一切,我需要爲一個測試文件定義全局變量。這意味着我無法在另一個測試文件中定義相同的變量。我想確保我能夠單獨運行每個測試並同時運行它們...... – shadyyx
「測試文件」是什麼意思?我知道你有a_test.go b_test.go,但這不應該是個問題吧?如果你運行一個測試,它將所有東西都設置爲一次測試,否則它會將所有設置設置爲多次測試? – Machiel