1. override
Future<Null> runTest(Future<Null> testBody(), VoidCallback invariantTester)

Call the testBody inside a FakeAsync scope on which pump can advance time.

Returns a future which completes when the test has run.

Called by the testWidgets and benchmarkWidgets functions to run a test.

The invariantTester argument is called after the testBody's Future completes. If it throws, then the test is marked as failed.

Source

@override
Future<Null> runTest(Future<Null> testBody(), VoidCallback invariantTester) {
  assert(!inTest);
  assert(_fakeAsync == null);
  assert(_clock == null);
  _fakeAsync = new FakeAsync();
  _clock = _fakeAsync.getClock(new DateTime.utc(2015, 1, 1));
  Future<Null> testBodyResult;
  _fakeAsync.run((FakeAsync fakeAsync) {
    assert(fakeAsync == _fakeAsync);
    testBodyResult = _runTest(testBody, invariantTester);
    assert(inTest);
  });
  // testBodyResult is a Future that was created in the Zone of the fakeAsync.
  // This means that if we call .then() on it (as the test framework is about to),
  // it will register a microtask to handle the future _in the fake async zone_.
  // To avoid this, we wrap it in a Future that we've created _outside_ the fake
  // async zone.
  return new Future<Null>.value(testBodyResult);
}