考慮,做基礎上,論證了一些異常處理函數傳遞參數:你如何在Dart中單元測試異常?
List range(start, stop) {
if (start >= stop) {
throw new ArgumentError("start must be less than stop");
}
// remainder of function
}
如何測試,正確類型的異常升高?
考慮,做基礎上,論證了一些異常處理函數傳遞參數:你如何在Dart中單元測試異常?
List range(start, stop) {
if (start >= stop) {
throw new ArgumentError("start must be less than stop");
}
// remainder of function
}
如何測試,正確類型的異常升高?
在這種情況下,有各種方法來測試異常。爲了簡單的測試將引發異常:
expect(() => range(5, 5), throws);
來測試異常的正確類型的提高:
expect(() => range(5, 2), throwsA(new isInstanceOf<ArgumentError>()));
,以確保不發生異常:
expect(() => range(5, 10), returnsNormally);
到測試異常類型和異常消息:
expect(() => range(5, 3),
throwsA(predicate((e) => e is ArgumentError && e.message == 'start must be less than stop')));
這裏是另一種方式來做到這一點:
expect(() => range(5, 3),
throwsA(allOf(isArgumentError, predicate((e) => e.message == 'start must be less than stop'))));
(感謝格雷厄姆惠勒在谷歌的最後2個解決方案)。
我喜歡這種方法:
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");
});
這是比其他選項更詳細一些,但它是相當可讀的,它並不假定你已經記住了整個單元測試庫;) –
對於簡單的異常測試,我更喜歡用靜態方法API:
Expect.throws(
// test condition
(){
throw new Exception('code I expect to throw');
},
// exception object inspection
(err) => err is Exception
);
我是做'希望(範圍(5,3),throwsArgumentError )',但這個例外在預期內並沒有被捕獲。期望的第一個參數必須是一個匿名函數,當被調用時它最終會拋出。你的回答幫助我找到了那個愚蠢的錯誤,謝謝! – fgiraldeau