The unit test, iss_dart.test
, mocks the IssLocator class:
// The Mock class uses noSuchMethod to catch all method invocations. 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); }); });
iss.dart : International space station API library
iss_test.dart : Unit tests for iss.dart library