2012-01-16 28 views
5

Khi tôi chạy thử nghiệm perl bằng cách sử dụng tiện ích prove, nó không thành công nếu phương pháp thử nghiệm chứa print câu lệnh không được kết thúc bằng dòng mới.Kiểm tra thất bại dưới chứng minh nếu nó viết để stdout mà không có newline

use Test::More tests=>1; 

ok(foo(), "calling foo"); 

sub foo{ 
    print "A"; 
    1; 
} 

Điều này dẫn đến

Bad plan. You planned 1 tests but ran 0. 

Nếu tôi thêm một dòng mới: print "A\n"; kiểm tra đi.

(Lưu ý rằng nếu tôi chỉ thực hiện thử nghiệm perl mytest.t thay vì sử dụng prove thì nó sẽ được chuyển theo một trong hai cách).

Bất kỳ ý tưởng nào về lý do này có thể và cách khắc phục?

+5

Xem http://stackoverflow.com/q/1538260/1030675 Đầu ra của 'print' can thiệp vào những gì' chứng minh' mong đợi. – choroba

Trả lời

2

Tôi tìm thấy một workaround nhanh:

$|=0;  # no auto-flush 

... nhưng tôi không có ý tưởng (chưa) lý do tại sao các công trình này.

+0

Cảm ơn điều này hoạt động và đơn giản hơn so với địa phương stdout vv Tôi có thể thấy rằng khi tôi làm điều này, với công tắc tiết cho phép, các báo cáo in thử xuất hiện trên một dòng _after_ dòng 'ok - test passed', trong khi trước chúng xuất hiện trên cùng một dòng. Nó gần như là nếu 'chứng minh' được phân tích cú pháp đầu ra của riêng nó khi quyết định xem chạy thử đã vượt qua 100% hay chưa. (Lưu ý rằng thử nghiệm ban đầu không bị lỗi, thay vào đó 'chứng minh' đã giảm giá khi kiểm tra số lần chạy thử nghiệm.) – perlyking

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