2015-04-08 23 views
5

Gần đây tôi hy vọng viết một bài kiểm tra đơn vị cho golang. Chức năng như sau.Làm thế nào để kiểm tra io.writer trong golang?

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

Vậy làm cách nào để kiểm tra kết quả của "Hiển thị func" là "hello world"?

Trả lời

11

Bạn có thể chỉ cần vượt qua trong số io.Writer của riêng bạn và kiểm tra những gì được ghi vào nó khớp với những gì bạn mong đợi. bytes.Buffer là một lựa chọn tốt cho một io.Writer vì nó chỉ lưu trữ đầu ra trong bộ đệm của nó.

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

Cảm ơn bạn rất nhiều vì đã giúp đỡ! Nó chỉ là những gì tôi muốn! – wonderflow

+1

Lỗi trong điều này: bạn cần có '& b' trong cuộc gọi Hiển thị * hoặc *' b: = new (byte.Buffer) 'vì phương thức' Write' có một bộ thu con trỏ. –

+1

Cảm ơn Dave, đã sửa. –

Các vấn đề liên quan