Dart testing

Software testing, an important part of app development, helps verify thatyour app is working correctly before you release it.This Dart testing guide outlines several types of testing, and pointsyou to where you can learn how to test yourmobile,web,and server-side apps and scripts.

Terminology: widget vs. componentFlutter, an SDK for building apps for iOS and Android, defines itsGUI elements as widgets. AngularDart, a web app framework,defines its GUI elements as components.This doc uses component (except when explicitly discussing Flutter),but both terms refer to the same concept.

Kinds of testing

The Dart testing docs focus on three kinds of testing, out of themany kinds of testingthat you may be familiar with: unit, component, and end-to-end(a form of integration testing). Testing terminology varies,but these are the terms and concepts that you are likely toencounter when using Dart technologies:

  • Unit tests focus on verifying the smallest piece of testablesoftware, such as a function, method, or class. Your test suitesshould have more unit tests than other kinds of tests.

  • Component tests verify that a component (whichusually consists of multiple classes) behaves as expected.A component test often requires the use of mock objectsthat can mimic user actions, events, perform layout,and instantiate child components.

  • Integration and end-to-end tests verify the behavior ofan entire app, or a large chunk of an app. An integration testgenerally runs on a real device or OS simulator (for mobile)or on a browser (for the web) and consists of two pieces:the app itself, and the test app that putsthe app through its paces. An integration test often measures performance,so the test app generally runs on a different device or OSthan the app being tested.

Generally useful libraries

Although your tests partly depend on the platform your code is intendedfor—Flutter, the web, or server-side, for example—thefollowing packages are useful across Dart platforms:

  • package:testProvides a standard way of writing tests in Dart. You can use the testpackage to:
    • Write single tests, or groups of tests.
    • Use the @TestOn annotation to restrict tests to run onspecific environments.
    • Write asynchronous tests just as you would write synchronoustests.
    • Tag tests using the @Tag annotation. For example, define a tag tocreate a custom configuration for some tests, or to identify some testsas needing more time to complete.
    • Create a dart_test.yaml file to configure tagged tests acrossmultiple files or an entire package.
  • package:mockitoProvides a way to createmock objects,easily configured for use in fixed scenarios, and to verifythat the system under test interacts with the mock object inexpected ways.For an example that uses both package:test and package:mockito,see the International Space Station API library and its unittestsin the mockito package.

Flutter testing

Use the following resources to learn more about testing Flutter apps:

Web testing

Use the following resources to learn more about testing Dart webapplications:

Other tools and resources

You may also find the following resources useful for developing anddebugging Dart applications.

IDE

When it comes to debugging, your first line of defense is your IDE.Dart plugins exist for many commonly used IDEs.

Dart DevTools

Dart DevTools is a suite of performance tools for Dart and Flutter.For details, see theDart DevTools documentation.

Continuous integration

Consider using continuous integration (CI) to build your projectand run its tests after every commit. Two CI services for GitHub areTravis CI (for OS X and Unix) andAppVeyor (for Windows).

Travis has built-in support for Dart projects.Learn more at the following links:

  • Building a Dart Projectcovers how to configure Travis for Dart projects
  • The shelfexample uses the dart_task tag (in .travis.yml) to configurethe build.