Ho un app (epazote) che una volta che si avvia corre sempre ma voglio provare alcuni valori prima blocca/attende fino Ctrl +c viene premuto o viene ucciso.Come testare il codice che loop per sempre
Ecco un piccolo esempio: 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")
}
Vorrei sapere se è posible a ignorare alcune parti del codice durante il test, o il modo di testare questo caso, ho implementato un'interfaccia, in questo caso per il test AddString
che mi ha aiutato a testare alcune parti ma non ho idea di come evitare il "blocco" e il test.
Qualche idea?
Aggiornamento: Mettere il codice all'interno del ciclo Addstring
in un altro opere di funzione, ma solo per testare quella funzione, ma se voglio fare una copertura del codice completo, ho ancora bisogno di verificare/testare la parte di blocco, per esempio come verificare che si comporta correttamente quando si riceve ctrl + c o kill -HUP
, stavo pensando di creare forse un falso signal.Notify
ma non so come sovrascrivere i pacchetti importati nel caso in cui potesse funzionare.
Sì, è possibile. Inserisci il codice che si trova all'interno del ciclo in una funzione separata e l'unità prova quella funzione senza il ciclo. – GolezTrol
Sono d'accordo con @GolezTrol. Golez, dovresti metterlo nella sezione di risposta in modo da poterlo invogliare ;-) – Daniel
Un codice che scorre per sempre? Mi piacerebbe conoscere un buon scenario quando è bello avere un ciclo infinito. Questo è davvero negativo per le prestazioni. Non è vero? – Erick