2015-04-08 16 views
5

Ostatnio mam nadzieję napisać test jednostkowy dla golanga. Funkcja jest jak poniżej.Jak przetestować io.writer w golangu?

func (s *containerStats) Display(w io.Writer) error { 
    fmt.Fprintf(w, "%s %s\n", "hello", "world") 
    return nil 
} 

Jak mogę przetestować wynik "Func Display" to "witaj świecie"?

Odpowiedz

11

Możesz po prostu przekazać własne io.Writer i sprawdzić, co zostanie zapisane w nim odpowiada oczekiwaniom. bytes.Buffer jest dobrym wyborem dla takiego io.Writer, ponieważ po prostu przechowuje dane wyjściowe w swoim buforze.

func TestDisplay(t *testing.T) { 
    s := newContainerStats() // Replace this the appropriate constructor 
    var b bytes.Buffer 
    if err := s.Display(&b); err != nil { 
     t.Fatalf("s.Display() gave error: %s", err) 
    } 
    got := b.String() 
    want := "hello world\n" 
    if got != want { 
     t.Errorf("s.Display() = %q, want %q", got, want) 
    } 
} 
+0

Dziękuję bardzo za pomoc! Właśnie tego chcę! – wonderflow

+1

Typo w tym: potrzebujesz '& b' w wywołaniu Display * lub *' b: = new (bytes.Buffer), ponieważ metoda 'Write' ma odbiornik wskaźnika. –

+1

Dzięki Dave, naprawione. –