如何在Dart中测试带参数的方法是否抛出异常?问题代码求解
解决Dart测试中验证抛出Error的问题
你的测试代码有两个关键问题,我来一步步帮你修正:
1. 立即执行方法导致异常提前抛出
当你直接写expect(errorThrower.throwAnError("string"), throwsException);时,throwAnError方法会在expect函数执行前就抛出错误,测试框架根本没机会捕获它。你需要把方法调用包装成一个匿名函数/闭包,让expect去执行这个函数并捕获异常。
2. 匹配器类型不匹配
throwsException这个预定义匹配器专门用来匹配Exception类型的实例,但你的代码抛出的是Error——在Dart里,Error和Exception是两个不同的顶层类型,所以这个匹配器不会生效。你需要使用throwsA(isA<Error>())来精准匹配Error实例。
修正后的测试代码
test('验证throwAnError方法抛出Error', () { var errorThrower = ErrorThrower(); // 把方法调用包装成匿名函数 expect(() => errorThrower.throwAnError("string"), throwsA(isA<Error>())); });
额外说明
如果你的测试框架(比如test包)有预定义的throwsError匹配器,也可以直接用它来简化代码:
expect(() => errorThrower.throwAnError("string"), throwsError);
不过throwsA(isA<Error>())的方式更明确,能清晰表达你要验证的具体错误类型。
内容的提问来源于stack exchange,提问作者Tree
相关产品推荐
相关产品推荐

