2012-11-08 31 views
10

Xem xét một chức năng mà một số xử lý ngoại lệ dựa trên những lập luận thông qua:Làm thế nào để bạn loại bỏ ngoại lệ trong Dart?

List range(start, stop) { 
    if (start >= stop) { 
     throw new ArgumentError("start must be less than stop"); 
    } 
    // remainder of function 
} 

Làm thế nào để kiểm tra xem đúng loại ngoại lệ xảy ra?

Trả lời

23

Trong trường hợp này, có nhiều cách khác nhau để kiểm tra ngoại lệ. Chỉ đơn giản là kiểm tra rằng một ngoại lệ được nâng lên:

expect(() => range(5, 5), throws); 

để kiểm tra rằng đúng loại ngoại lệ xảy ra:

expect(() => range(5, 2), throwsA(new isInstanceOf<ArgumentError>())); 

để đảm bảo rằng không có ngoại lệ xảy ra:

expect(() => range(5, 10), returnsNormally); 

để kiểm tra loại ngoại lệ và thông báo ngoại lệ:

expect(() => range(5, 3), 
    throwsA(predicate((e) => e is ArgumentError && e.message == 'start must be less than stop'))); 
.210

đây là một cách khác để làm điều này:

expect(() => range(5, 3), 
    throwsA(allOf(isArgumentError, predicate((e) => e.message == 'start must be less than stop')))); 

(Nhờ Graham Wheeler tại Google trong 2 giải pháp cuối cùng).

+0

tôi đang làm 'mong đợi (phạm vi (5, 3), throwsArgumentError) ', nhưng ngoại lệ không được nắm bắt bên trong mong đợi. Đối số đầu tiên mong đợi phải là một hàm ẩn danh mà cuối cùng sẽ ném khi được gọi. Câu trả lời của bạn đã giúp tôi tìm ra lỗi ngu ngốc đó, cảm ơn! – fgiraldeau

2

Tôi thích cách tiếp cận này:

test('when start > stop',() { 
    try { 
    range(5, 3); 
    } on ArgumentError catch(e) { 
    expect(e.message, 'start must be less than stop'); 
    return; 
    } 
    throw new ExpectException("Expected ArgumentError"); 
}); 
+0

Đó là một chút chi tiết hơn so với các tùy chọn khác, nhưng nó khá dễ đọc, và nó không giả sử bạn có toàn bộ thư viện unittest ghi nhớ;) –

1

Để thử nghiệm ngoại lệ đơn giản, tôi thích sử dụng phương pháp API tĩnh:

Expect.throws(
    // test condition 
(){ 
    throw new Exception('code I expect to throw'); 
    }, 
    // exception object inspection 
    (err) => err is Exception 
); 
Các vấn đề liên quan