在Go 中使用反射測試函數集合
為了滿足高效測試具有相似簽名和返回值的函數的需求,反射提供了一個強大的解決方案。在 Go 中,reflect 套件提供的功能可讓您在執行時間檢查和操作值、類型和函數。
對於給定的場景,需要在類似的條件下測試多個函數,反射使您能夠編寫一個測試。此測試將涉及以下步驟:
以下是演示所描述方法的測試代碼摘錄:
<code class="go">func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() err := ret[1] if val < 1 { t.Error(fname + " should return positive value") } if err.IsNil() == false { t.Error(fname + " shouldn't err") } } }</code>
此測試將迭代函數片段名稱,按名稱查找每個函數,調用它並斷言返回值,確保每個函數符合指定的測試條件。請注意,如果指定名稱的函數不存在,測試將會出現混亂。要優雅地處理這種情況,請考慮添加 defer 語句以從任何恐慌中恢復。
透過這種方法,您可以有效地編寫單一測試來驗證具有相似簽章和傳回值的多個函數,利用強大的功能和靈活性Go 中的反射。
以上是反射如何簡化 Go 中具有相似簽名的多個函數的測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!