Slide 29
Slide 29 text
A better unit test, with URLMock
- (void)testFetchTemperatureForLatitudeLongitudeCorrectData
{
// setting up latitude, longitude and tempearture to expect
NSURL *temperatureURL = [self temperatureURLWithLatitude:latitude longitude:longitude];
[UMKMockURLProtocol expectMockHTTPGetRequestWithURL:temperatureURL
responseStatusCode:200
responseJSON:@{ @"main" : @{ @"temp" : temperature } }];
__block BOOL succeeded = NO;
__block BOOL failed = NO;
__block NSNumber *kelvins = nil;
[self.APIClient fetchTemperatureForLatitude:latitude
longitude:longitude
success:^(NSNumber *temperatureInKelvins) {
succeeded = YES;
kelvins = temperatureInKelvins;
}
failure:^(NSError *error) {
failed = YES;
}];
UMKAssertTrueBeforeTimeout(1.0, succeeded, @"success block is not called");
UMKAssertTrueBeforeTimeout(1.0, !failed, @"failure block is called");
UMKAssertTrueBeforeTimeout(1.0, [kelvins isEqualToNumber:temperature], @"incorrect temperature");
NSError *verificationError = nil;
XCTAssertTrue([UMKMockURLProtocol verifyWithError:&verificationError], @"verification failed");
}