Flutter: Test that a specific exception is thrown Flutter: Test that a specific exception is thrown flutter flutter

Flutter: Test that a specific exception is thrown


This should do what you want:

expect(() => operations.lookupOrderDetails(), throwsA(isA<MyCustErr>()));

if you just want to check for exception check this answer:


After `TypeMatcher<>' has been deprecated in Flutter 1.12.1 I found this to work:

expect(() => operations.lookupOrderDetails(), throwsA(isInstanceOf<MyCustErr>()));


As of April 2021 this is the correct method.

CORRECT METHOD

import 'package:dcli/dcli.dart';import 'package:test/test.dart'; /// GOOD: works in all circumstances. expect(() => restoreFile(file), throwsA(isA<RestoreFileException>()));

Some examples show :

INCORRECT METHOD

import 'package:dcli/dcli.dart';import 'package:test/test.dart'; /// BAD: works but not in all circumstances expect(restoreFile(file), throwsA(isA<RestoreFileException>()));

Note the missing '() => ' after the expect.

The difference is that the first method will work for functions that return void whilst the second method won't.

So the first method should be the prefered technique.

To test for a specific error message:

CHECK CONTENTS OF EXCEPTION AS WELL

import 'package:dcli/dcli.dart';import 'package:test/test.dart';    expect(        () => copy(from, to),        throwsA(predicate((e) =>            e is CopyException &&            e.message == 'The from file ${truepath(from)} does not exists.')));