How to test functions that throw in Flutter

When writing test expectations for functions that throw, we need a bit careful.

For example, consider this simple test:

test('function throws', () { expect( someFunctionThatThrows(), throwsStateError, ); });

In this case, the test will fail, because someFunctionThatThrows() is evaluated before the expect function is called.

This is equivalent to writing the test like this:

test('function throws', () { // if the function throws, the test will fail immediately final result = someFunctionThatThrows(); // and this line will never be exectuted expect( result, throwsStateError, ); });

To fix this, we can pass an anonymous function as an argument to the expect method:

test('function throws', () { expect( // function argument, will be evaluated *inside* the expect function () => someFunctionThatThrows(), throwsStateError, ); });

Or even better, we can use a tear-off and pass someFunctionThatThrows directly as an argument (without calling it):

test('function throws', () { expect( someFunctionThatThrows, throwsStateError, ); });

This is safer, and more concise too! 👌

For more info about tear-offs, see this rule about effective Dart usage.

Happy coding!

Want More?

Invest in yourself with my high-quality Flutter courses.

Flutter Foundations Course

Flutter Foundations Course

Learn about State Management, App Architecture, Navigation, Testing, and much more by building a Flutter eCommerce app on iOS, Android, and web.

Flutter & Firebase Masterclass

Flutter & Firebase Masterclass

Learn about Firebase Auth, Cloud Firestore, Cloud Functions, Stripe payments, and much more by building a full-stack eCommerce app with Flutter & Firebase.

The Complete Dart Developer Guide

The Complete Dart Developer Guide

Learn Dart Programming in depth. Includes: basic to advanced topics, exercises, and projects. Fully updated to Dart 2.15.

Flutter Animations Masterclass

Flutter Animations Masterclass

Master Flutter animations and build a completely custom habit tracking application.