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

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

如何測試永遠(yuǎn)循環(huán)的代碼

如何測試永遠(yuǎn)循環(huán)的代碼

Go
江戶川亂折騰 2021-12-07 16:02:30
我有一個(gè)應(yīng)用程序(epazote),一旦啟動(dòng)就會永遠(yuǎn)運(yùn)行,但我想在它阻塞/等待直到ctrl+c被按下或被殺死之前測試一些值。這是一個(gè)小例子:http : //play.golang.org/p/t0spQRJB36package mainimport (    "fmt"    "os"    "os/signal")type IAddString interface {    AddString(string)}type addString struct{}func (self *addString) AddString(s string) {    fmt.Println(s)}func block(a IAddString, s string) {    // test this    a.AddString(s)    // ignore this while testing    block := make(chan os.Signal)    signal.Notify(block, os.Interrupt, os.Kill)    for {        signalType := <-block        switch signalType {        default:            signal.Stop(block)            fmt.Printf("%q signal received.", signalType)            os.Exit(0)        }    }}func main() {    a := &addString{}    block(a, "foo")}我想知道在測試時(shí)是否可以忽略代碼的某些部分,或者如何測試這種情況,我已經(jīng)實(shí)現(xiàn)了一個(gè)接口,在這種情況下用于測試AddString 幫助我測試某些部分但不知道如何避免“阻塞”并進(jìn)行測試。有任何想法嗎?更新:將代碼放入Addstring另一個(gè)函數(shù)的循環(huán)中有效但僅用于測試該函數(shù),但是如果我想進(jìn)行完整的代碼覆蓋,我仍然需要檢查/測試阻塞部分,例如如何測試它的行為是否正常當(dāng)收到ctrl+c或 a 時(shí)kill -HUP,我在想可能會創(chuàng)建一個(gè)假的,signal.Notify但不知道如何覆蓋導(dǎo)入的包,以防萬一。
查看完整描述

2 回答

?
揚(yáng)帆大魚

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

將測試委托引入您的代碼。

將您的循環(huán)提取到一個(gè)函數(shù)中,該函數(shù)接受 2 個(gè)函數(shù)作為參數(shù):onBeginEvent 和 onEndEvent。函數(shù)簽名應(yīng)采用:

  • 聲明您要在測試用例中檢查

  • 可選:循環(huán)編號的計(jì)數(shù)器(因此您可以識別每個(gè)循環(huán))。它是可選的,因?yàn)閷?shí)際的委托實(shí)現(xiàn)可以計(jì)算它被自身調(diào)用的次數(shù)。

在循環(huán)開始時(shí),您調(diào)用 OnBegingEvent(counter, currentState); 比您的代碼完成其正常工作,最后您調(diào)用 OnEndEvent(counter, currentState); 大概你的代碼已經(jīng)改變了 currentState。

在生產(chǎn)中,您可以使用函數(shù)委托的空實(shí)現(xiàn)或在循環(huán)中實(shí)現(xiàn) nil 檢查。

您可以使用此模型根據(jù)需要對處理算法進(jìn)行盡可能多的檢查。假設(shè)您有 5 張支票?,F(xiàn)在你回過頭來看它并意識到這變得太難了。您創(chuàng)建一個(gè)接口來定義您的回調(diào)函數(shù)。這些回調(diào)函數(shù)是改變服務(wù)行為的強(qiáng)大方法。你再退一步,意識到接口實(shí)際上是你的“服務(wù)策略”;)

一旦你走那條路,你就會想以某種方式停止你的無限循環(huán)。如果您想在測試用例中進(jìn)行嚴(yán)格控制,您可以采用第三個(gè)函數(shù)委托,如果需要退出循環(huán),該委托將返回 true。共享變量是控制退出條件的選項(xiàng)。

這當(dāng)然是比單元測試更高級別的測試,并且在復(fù)雜的服務(wù)中是必要的。


查看完整回答
反對 回復(fù) 2021-12-07
?
GCT1015

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

是的,這是可能的。將循環(huán)內(nèi)的代碼放在一個(gè)單獨(dú)的函數(shù)中,并在沒有循環(huán)的情況下對該函數(shù)進(jìn)行單元測試。


查看完整回答
反對 回復(fù) 2021-12-07
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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