私は一度、永遠に実行を開始するアプリ(epazote)を持っているが、私は押されたり殺されCTRL + Cまでブロック/待機の前にいくつかの値をテストしたいです。私はテスト、またはどのようにこのケースをテストするためしながらコードの一部を無視することがかのうであるかどうかを知りたい、私は、インターフェイスを実装しているhttp://play.golang.org/p/t0spQRJB36は永遠に
package main
import (
"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")
}
:ここ
が小さい例でありますこのケースはAddString
のテストに役立ちましたが、それは私がいくつかの部分をテストするのに役立ちましたが、 "ブロック"とテストを回避する方法は全く分かりませんでした。
アイデア?
更新:別の関数の作品にしかその機能をテストするためのループAddstring
内のコードを置くが、私は完全なコードカバレッジを行いたい場合は、私はまだ、たとえば、遮断部をテストする/確認する必要がありますctrl + cまたはkill -HUP
を受け取ったときに正しく動作するかどうかをテストするには、偽のを作成することを考えていましたが、動作する可能性がある場合にインポートされたパッケージを上書きする方法はわかりません。
はい、可能です。ループ内にあるコードを別の関数に置き、ループなしで機能する単体テストを入れます。 – GolezTrol
私は@GolezTrolに同意します。ゴレズ、答えセクションにそれを入れてupvote ;-) – Daniel
永遠にループするコード?私は無限ループを持つことが良いときに良いシナリオを知りたいです。それはパフォーマンスにとっては本当に悪いことです。ではない? – Erick