首頁  >  文章  >  後端開發  >  如何從非測試函數呼叫“assert”函數?

如何從非測試函數呼叫“assert”函數?

WBOY
WBOY轉載
2024-02-10 10:30:10493瀏覽

如何從非測試函數呼叫“assert”函數?

php小編草莓為大家帶來了一篇關於如何從非測試函數呼叫「assert」函數的文章。在PHP中,我們通常將「assert」函數用於編寫測試案例,但有時我們也希望在非測試函數中使用它。本文將詳細介紹如何在非測試函數中呼叫「assert」函數的步驟和注意事項,幫助讀者更能理解並運用此函數。無論您是初學者還是有一定經驗的開發者,都能從本文中獲得有價值的知識和技巧。讓我們一起來探索吧!

問題內容

這個問題類似於 Go 中非測試函數中的斷言,但我確實想從非測試函數中呼叫 assert.ElementsMatch

如何實例化 testing.T 物件?

該函數最終將從 main 調用,該函數使用標誌進行配置,因此它不能只是一個測試。

上下文:我們正在執行從某些來源資料庫到目標資料庫的資料遷移。遷移的第一部分是將資料從來源複製到目標的保存表中。第二部分(這是assert.ElementsMatch 發揮作用的地方)是查看保存表和通用表有何不同- 我們希望嘗試通過數據遷移捕獲不可預見的情況(例如,某些日期的格式可能不同或錯誤)身份證號碼已複製)。第三部分是,一旦保存表資料經過審查,將其複製到通用表中。這一切聽起來有點過於複雜,但這可能是因為目前正在使用來源資料庫和目標通用資料庫。

解決方法

您不需要 testing.T 的實例。

assert.ElementsMatch 函數採用 #assert.TestingT 作為其參數,這是一個具有單一方法的介面。因此,您可以簡單地定義該介面的自訂實現,該實作可以使用該方法執行您喜歡的任何操作,並將該自訂實作的實例傳遞給 assert.ElementsMatch

例如:

type testingT struct{}

func (testingT) Errorf(format string, args ...interface{}) {
    fmt.Printf(format, args...)
}

// ...

t := new(testingT)
if assert.ElementsMatch(t, listA, listB) {
    // ...
}

以上是如何從非測試函數呼叫“assert”函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除