anchor.diff:  import 'package:mockito/mockito.dart';
   import 'package:devops/src/pubspec/pubspec.dart';
   import 'dart:async';
  +import 'package:devops/src/pubspec/dependency.dart';
   
   main() {
     TestProcessor processor;
  
positive.code:   final Iterable<Project> dependencies;
  
    TestProcessInvocation(this.project, this.dependencies);
  }
  
  class MockProject extends Mock implements Project {
    MockProject(PubSpec pubSpec) {
      when(this.pubspec).thenReturn(new Future.value(pubSpec));
    }
    noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
  }
  
negative.code:   call(Project project, Iterable<Project> dependencies) {
      invocations.add(new TestProcessInvocation(project, dependencies));
    }
  
    static createTests(
        TestProcessor processor(), List<TestProcessInvocation> expected) {
      test('has expected number of invocations', () {
        schedule(
            () => expect(processor().invocations, hasLength(expected.length)));
      });
  
      group('each invocation matches expectation', () {
        for (int i = 0; i < expected.length; i++) {
          TestProcessInvocation.createTests(
              () => processor().invocations[i], expected[i]);
        }
      });
    }
  }
  
  class TestProcessInvocation {
  