第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

運(yùn)行 http.ListenAndServe() On Tests using

運(yùn)行 http.ListenAndServe() On Tests using

Go
www說(shuō) 2022-10-31 15:56:47
我正在嘗試為我使用gorilla/mux、gorm.io和golang-migrate/v4制作的 REST API 應(yīng)用程序創(chuàng)建集成測(cè)試對(duì)于我正在使用的測(cè)試testify。我SetupSuite()的我integration_Test.go是這樣的:func (s *ReceiptServiceTestSuite) SetupSuite() {    s.Require().NoError(godotenv.Load("test.env"))    s.Require().NoError(database.Connect())    s.db = database.DB    s.m = database.M    router.HandleRequests()}而我router.HandleRequests()的是這樣的:func HandleRequests() {    router := mux.NewRouter()    router.Use(middleware)    // lots of router.HandleFunc()        http.ListenAndServe(":8080", router)}問(wèn)題是:如果我router.HandleRequests()從 中刪除SetupSuite(),我所有的數(shù)據(jù)庫(kù)測(cè)試都會(huì)正常運(yùn)行,但是如果我嘗試http.ListenAndServe()停止測(cè)試工作流并且什么也沒(méi)有發(fā)生。我相信我應(yīng)該使用 goroutinesrouter.HandleRequests()以便它可以與測(cè)試并行運(yùn)行,我只是不知道該怎么做。有關(guān)更多信息,這里是項(xiàng)目存儲(chǔ)庫(kù),我不知道它是否相關(guān),但我正在運(yùn)行兩個(gè) postgres 實(shí)例docker-compose,一個(gè)用于運(yùn)行項(xiàng)目,另一個(gè)用于測(cè)試。
查看完整描述

1 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

我想出了如何使用 goroutines 來(lái)做到這一點(diǎn)。


我讀了這個(gè)例子,它教如何處理os.Signals使用渠道,我是這樣實(shí)現(xiàn)的:


首先,我在路由器上進(jìn)行了以下更改:


func HandleRequests() {

    router := mux.NewRouter()

    router.Use(middleware)

    // lots of router.HandleFunc()

    

    go http.ListenAndServe(":8080", router)


    quit := make(chan os.Signal, 1)

    signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)


    <-quit


}

所以現(xiàn)在http.ListenAndServe()正在一個(gè)新線程中運(yùn)行。我相信默認(rèn)行為會(huì)在程序執(zhí)行結(jié)束時(shí)停止。


之后http.ListenAndServe(),我創(chuàng)建了一個(gè)os.Signalchanel,它將監(jiān)聽(tīng)來(lái)自系統(tǒng)的傳入信號(hào)(SIGINT 和 SIGTERM),然后該函數(shù)將停止在<-quit,它將等待一個(gè)信號(hào)繼續(xù)。


然后我修復(fù)了我在 goroutineSetupSuite()中運(yùn)行:router.HandleRequests()


func (s *ReceiptServiceTestSuite) SetupSuite() {

    s.Require().NoError(godotenv.Load("test.env"))

    s.Require().NoError(database.Connect())

    s.db = database.DB

    s.m = database.M


    go router.HandleRequests()

}

在我TearDownSuite()向當(dāng)前進(jìn)程發(fā)送 SIGTERM 信號(hào)時(shí),quit我之前創(chuàng)建的通道將監(jiān)聽(tīng)該信號(hào),router.HandleRequests()并且該函數(shù)將繼續(xù)終止程序。


func (s *ReceiptServiceTestSuite) TearDownSuite() {

    // some database code 

    p, _ := os.FindProcess(os.Getpid())

    p.Signal(syscall.SIGINT)

}


查看完整回答
反對(duì) 回復(fù) 2022-10-31
  • 1 回答
  • 0 關(guān)注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)