考虑,做基础上,论证了一些异常处理函数传递参数:你如何在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