2013-02-08 24 views
6

Trong thử nghiệm đơn vị Dart của tôi, làm cách nào để xác minh rằng bản in đã được gọi?Làm cách nào để thử hoặc xác minh cuộc gọi để in, trong các thử nghiệm đơn vị Dart?

Tôi đang viết mã mẫu cho hướng dẫn và tôi muốn thử nghiệm nó. Nhiều mẫu sử dụng print để đơn giản. Tôi muốn thử nghiệm đơn vị của mình để xác minh rằng in được gọi với đầu vào phù hợp.

Cảm ơn!

Trả lời

2

Cập nhật: ZoneSpecification cho phép ghi đè hàm print. Bằng cách chạy mã dưới sự kiểm tra bên trong một vùng tùy chỉnh, bạn có thể chụp các cuộc gọi đến hàm print. Ví dụ, kiểm tra sau chuyển hướng tất cả các thư in vào một danh sách trong bộ nhớ log:

import 'dart:async'; 
import 'package:test/test.dart'; 

var log = []; 

main() { 
    test('override print', overridePrint(() { 
    print('hello world'); 
    expect(log, ['hello world']); 
    })); 
} 

overridePrint(testFn()) =>() { 
    var spec = new ZoneSpecification(
    print: (_, __, ___, String msg) { 
     // Add to log instead of printing to stdout 
     log.add(msg); 
    } 
); 
    return Zone.current.fork(specification: spec).run(testFn); 
}; 
+0

Bạn có thể thêm mã ví dụ hiển thị ghi đè không? –

+0

@SethLadd Xong. – Yegor

5

Tôi không nghĩ unittest thêm bất cứ điều gì cụ thể cho điều này, nhưng bạn có thể ghi đè lên bất kỳ chức năng cấp cao nhất trong phạm vi thử nghiệm của bạn và nắm bắt các cuộc gọi đến một bản ghi, ví dụ:

var printLog = []; 
void print(String s) => printLog.add(s); 

main() { 
    test('print',() { 
    myFuncUnderTest(); 
    expect(printLog.length, 2); 
    expect(printLog[0], contains('hello')); 
    // etc... 
    }); 
} 
+0

mát - Tôi đã không nhận thức được chức năng đó - Tôi nghĩ rằng bạn cần thiết để bí danh 'phi tiêu: core' để ghi đè lõi hàng đầu chức năng cấp. Giải pháp này hoạt động tốt. –

+0

Cảm ơn! Chính xác những gì tôi đang tìm kiếm. –

+0

Ngay sau khi tôi chuyển hàm myFuncUnderTest vào một thư viện khác, bản in bình thường được gọi và kiểm tra đơn vị không thành công. – richard

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