Tôi có một chức năng đơn giản, tôi muốn kiểm tra:Làm thế nào để thử nghiệm một sản lượng chức năng của (stdout/stderr) tại Gò đơn vị kiểm tra
func (t *Thing) print(min_verbosity int, message string) {
if t.verbosity >= minv {
fmt.Print(message)
}
}
Nhưng làm thế nào tôi có thể kiểm tra những gì thực tế hàm gửi tới đầu ra tiêu chuẩn? Test::Output làm những gì tôi muốn trong Perl. Tôi biết tôi có thể viết bài soạn sẵn của riêng tôi để làm điều tương tự tại Gò (như mô tả here):
orig = os.Stdout
r,w,_ = os.Pipe()
thing.print("Some message")
var buf bytes.Buffer
io.Copy(&buf, r)
w.Close()
os.Stdout = orig
if(buf.String() != "Some message") {
t.Error("Failure!")
}
Nhưng đó là rất nhiều công việc bổ sung cho tất cả các thử nghiệm duy nhất. Tôi hy vọng có một cách tiêu chuẩn hơn, hoặc có thể là một thư viện trừu tượng để xử lý điều này.
Đây có lẽ là những gì tôi sẽ làm, vì nó là một giải pháp tổng quát hơn so với được cung cấp bởi @ Ainar-G, yêu cầu tôi kiểm soát tất cả các mã có thể xuất ra một cái gì đó. – Flimzy