tree: a1f276ad3f858edc8ecc96c9f011516f3560013f [path history] [tgz]
  1. iss.dart
  2. iss_test.dart
  3. README.md
test/example/iss/README.md

International Space Station (ISS) library

This library accesses the International Space Station‘s APIs (using package:http) to fetch the space station’s current location.

The unit tests for this library use package:mockito to generate preset values for the space station's location, and package:test to create reproducible scenarios to verify the expected outcome.

The ISS library, iss.dart, consists of two classes:

IssLocator : Fetches the current GPS position directly under the space station.

IssSpotter : Performs calculations from the observer's location on earth.


Testing

The unit test, iss_dart.test, mocks the IssLocator class:

// The Mock class uses noSuchMethod to catch all method invocations.
// The @proxy annotation indicates that noSuchMethod calls should be
// handled gracefully. For more info, see the readme for package:mockito.
@proxy
class MockIssLocator extends Mock implements IssLocator {}

The tests check for two scenarios:

Spherical distance : Given two predefined points on earth, verify the calculated distance between them.

  group('Spherical distance', () {
    test('London - Paris', () {
      Point<double> london = new Point(51.5073, -0.1277);
      Point<double> paris = new Point(48.8566, 2.3522);
      double d = sphericalDistanceKm(london, paris);
      // London should be approximately 343.5km
      // (+/- 0.1km) from Paris.
      expect(d, closeTo(343.5, 0.1));
    });

    test('San Francisco - Mountain View', () {
      Point<double> sf = new Point(37.783333, -122.416667);
      Point<double> mtv = new Point(37.389444, -122.081944);
      double d = sphericalDistanceKm(sf, mtv);
      // San Francisco should be approximately 52.8km
      // (+/- 0.1km) from Mountain View.
      expect(d, closeTo(52.8, 0.1));
    });
  });

ISS Spotter : Stubs IssLocator.currentPosition using when().thenReturn(). Evaluate whether the space station (using a predefined location) is visible from a second predefined location. This test runs asynchronously.

  group('ISS spotter', () {
    test('ISS visible', () async {
      Point<double> sf = new Point(37.783333, -122.416667);
      Point<double> mtv = new Point(37.389444, -122.081944);
      IssLocator locator = new MockIssLocator();
      // Mountain View should be visible from San Francisco.
      when(locator.currentPosition).thenReturn(sf);

      var spotter = new IssSpotter(locator, mtv);
      expect(spotter.isVisible, true);
    });

    test('ISS not visible', () async {
      Point<double> london = new Point(51.5073, -0.1277);
      Point<double> mtv = new Point(37.389444, -122.081944);
      IssLocator locator = new MockIssLocator();
      // London should not be visible from Mountain View.
      when(locator.currentPosition).thenReturn(london);

      var spotter = new IssSpotter(locator, mtv);
      expect(spotter.isVisible, false);
    });
  });

Files