Mam app (epazote), który po uruchomieniu działa zawsze, ale chcę przetestować pewne wartości przed nim bloków/czeka aż ctrl + c jest wciśnięty lub zostanie zabity.Jak testować kod, który obwodów forever
Oto mały przykład: 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")
}
Chciałbym wiedzieć, czy jest posible ignorować niektóre części kodu podczas testowania, czy jak to przetestować przypadki, I wprowadziły interfejs, w ten przypadek do testowania AddString
pomógł mi przetestować niektóre części, ale nie mam pojęcia, jak uniknąć "bloku" i testu.
Wszelkie pomysły?
Aktualizacja: Umieszczenie kodu wewnątrz pętli Addstring
w kolejnych pracach funkcyjnych ale tylko do testowania tej funkcji, ale jeśli chcę zrobić pełnego pokrycia kodu, nadal trzeba sprawdzić/przetestować blokuje część, na przykład jak sprawdzić, czy jest prawidłowo zachowywać się podczas odbierania ctrl + c lub kill -HUP
, myślałem o może tworzyć fałszywe signal.Notify
ale nie wiem jak zastąpić importowane w przypadku pakietów, które mogłyby pracować.
Tak, jest to możliwe. Umieść kod znajdujący się w pętli w oddzielnej funkcji, a urządzenie przetestuj tę funkcję bez pętli. – GolezTrol
Zgadzam się z @GolezTrol. Golez, powinieneś umieścić to w sekcji odpowiedzi, abym mógł go odczytać ;-) – Daniel
Kod, który zapętla się na zawsze? Chciałbym poznać dobry scenariusz, kiedy dobrze jest mieć nieskończoną pętlę. To bardzo źle wpływa na wydajność. Czyż nie? – Erick