挑戰:
Go 1.18 引入了泛型,但是如何有效地泛型對泛型進行表測試當 T無法實例化時的函數
問題陳述:
由於無法實例化 T 值,目前的測試方法需要重新聲明每個函數的測試邏輯。
方法:
測試方法應著重於重複使用常見的邏輯,同時考慮泛型函數的特定性質。
解決方案:
1.可重複使用的測試邏輯:
建立一個通用的測試函數,例如runTestCase [T Item](tc testCase[T]),它封裝了設定測試和驗證結果等常見操作。
2。實例化注意事項:
泛型函數最終必須使用特定型別進行實例化。但是,沒有必要測試每個可能的類型參數。
3.專注於類型特定的行為:
僅當特定類型的行為因運算子語義而不同時,才專注於測試特定類型的函數。例如,數字和字串的運算符,或數字和字串的比較運算符。
範例:
此測試程式碼使用通用 runTestCase 函數來測試不同類型商店地圖中的值的數量:
func TestStore(t *testing.T) { t.Run("ints", testInt) t.Run("strings", testString) } func testString(t *testing.T) { t.Parallel() tests := []testCase[string]{ { start: store[string]{}, key: 123, val: "test", expected: store[string]{123: "test"}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } } func testInt(t *testing.T) { t.Parallel() tests := []testCase[int]{ { start: store[int]{}, key: 123, val: 456, expected: store[int]{123: 456}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } }
以上是在不實例化型別參數的情況下,如何有效地對 Go 中的泛型函數進行表格測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!