首頁  >  文章  >  後端開發  >  如何讓一個實例物件可供所有測試使用?

如何讓一個實例物件可供所有測試使用?

PHPz
PHPz轉載
2024-02-15 17:27:111068瀏覽

如何讓一個實例物件可供所有測試使用?

php小編魚仔將為大家介紹如何讓一個實例物件在所有測試中可供使用。在進行單元測試時,我們常常需要建立一個實例對象,並在多個測試案例中重複使用。為了避免重複建立物件的麻煩,我們可以透過使用setUp()方法,在測試開始前建立實例對象,並將其儲存為類別的屬性。這樣,我們就可以在所有測試方法中都能夠存取到這個實例對象,從而提高程式碼的複用性和測試效率。接下來,讓我們一起來看具體的實作方法。

問題內容

我正在為 http 服務編寫元件測試。我有一個測試運行程序類,其中包含一些有用的結構和共享函數(主要是“進行 http 呼叫”和“比較 json 結構”)。此測試運行器類別需要具有從 envvars 中提取的用於發送 http 呼叫的域。我不想每次進行 http 呼叫時都從環境變數中獲取域,而是更願意解析一次並將其設置在測試運行器類的實例中,然後讓該實例可用於我的所有測試函數。

假設測試函數的預期簽名是 func TestXxx(t *testing.T) {...} 我怎麼能讓這個實例可用於我的測試?

程式碼:

  • main.go - 使用 TestMain 從 envvars 取得網域並建立測試執行器類別的實例
  • testrunner.go - 讓 http 呼叫和驗證結果更容易的幫助程式類別
  • tests.go - 正在執行的實際測試。我正在將它們轉換為使用 golang 的測試庫,但您可以看到目前它們需要一個參數(測試運行器實例)

解決方法

使用套件級變數來儲存值。初始化訪問器函數中的值。使用sync.Once確保初始化完成一次。

type Helper struct {
    message string
}

var (
    helper     *Helper
    helperOnce sync.Once
)

func getHelper() *Helper {
    helperOnce.Do(func() {
        helper = &Helper{"Hello"}
    })
    return helper
}

func TestFirst(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

func TestSecond(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

https://www.php.cn/link/50d758cc9ab8bb51177b071d370caac2

#

以上是如何讓一個實例物件可供所有測試使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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