测试 Flutter 中是不是抛出了特定的异常
Posted
技术标签:
【中文标题】测试 Flutter 中是不是抛出了特定的异常【英文标题】:Test that a specific exception is thrown in Flutter测试 Flutter 中是否抛出了特定的异常 【发布时间】:2021-08-25 13:04:56 【问题描述】:我有一个检查异常的测试:
test('throws an exception if missing data', () async
final client = MockClient();
final _apiService = ApiService(client, 'test/');
when(
client.post(
Uri.parse('test/user/auth_user'),
headers:
'Content-Type': 'application/json',
,
body: json.encode("email": '', "password": ''),
),
).thenAnswer(
(_) async => http.Response(
'"status": 400,"data": "message": "Missing email or password fields"',
400,
),
);
expect(
await _apiService.login(email: '', password: ''),
isA<MissingDataException>(),
);
);
但不工作,这是测试的输出:
这是我的例外:
class MissingDataException implements Exception
String message;
MissingDataException(this.message);
我试过了
throwsException
并没有工作。
我也试过
throwsA(TypeMatcher<MissingDataException>())
也没有工作。
我能做什么?
提前致谢。
【问题讨论】:
【参考方案1】:我终于发现,只需将 await 拉出函数即可:
expect(
_apiService.login(email: '', password: ''),
throwsA(isA<MissingDataException>()),
);
【讨论】:
【参考方案2】:重构这个:
expect(
await _apiService.login(email: '', password: ''),
isA<MissingDataException>(),
);
到这里:
final fn = () async => await _apiService.login(email: '', password: '');
expect(
fn,
throwsA(isA<MissingDataException>())
);
您需要将函数引用传递给expect
以验证异常。现在,您将isA<MissingDataException>
与login()
的结果进行比较,但异常不会作为结果返回,应该进行处理。
【讨论】:
以上是关于测试 Flutter 中是不是抛出了特定的异常的主要内容,如果未能解决你的问题,请参考以下文章