4
통과하는 블록이 올바르게 실행되는지 어떻게 확인할 수 있습니까?통과하는 블록을 테스트하는 OCMock이 올바르게 실행됩니다.
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
[self updatePostalCode:newLocation withHandler:^(NSArray *placemarks, NSError *error) {
// code that want to test
CLPlacemark *placemark = [placemarks objectAtIndex:0];
self.postalCode = [placemark postalCode];
_geocodePending = NO;
}];
....
}
난을 PostalCode이 _geocodePending이 올바르게 설정되어 있는지 알고 싶어,하지만 난 OCMock 함께이 작업을 수행하는 방법을 알아낼 수 없습니다.
추가 코드
id mockSelf = [OCMockObject partialMockForObject:_location];
id mockPlacemart = (id)[OCMockObject mockForClass:[CLPlacemark class]];
[[[mockPlacemart stub] andReturn:@"10170"] postalCode];
[mockSelf setGeocodePending:YES];
[mockSelf setPostalCode:@"00000"];
[self.location handleLocationUpdate]([NSArray arrayWithObject:mockPlacemart], nil);
STAssertFalse([mockSelf geocodePending], @"geocodePending should be FALSE");
STAssertTrue([[mockSelf postalCode] isEqualToString:@"10170"], @"10170", @"postal is expected to be 10170 but was %@" , [mockSelf postalCode]);
감사합니다'[myClass가 handleLocationUpdate] ([NSArray를 arrayWithObject : mockPlacemark] 무); '그리고'expect(). to ... ... '을 볼 수 없습니까? 그리고 내 코드를 질문에 넣으면 이해할 수 있습니까? – sarunw
나열된대로 메소드를 정의하면'[myClass handleLocationUpdate]'는 블록을 리턴합니다. 블록을 함수로 실행하고 귀하의 모의가 포함 된 위치 표시 배열을 전달 중입니다. –
'expect()'는 Pete Kim의 우수한 matcher 프레임 워크 인 [Expecta] (https://github.com/petejkim/expecta)에서 가져온 것입니다. 우리는 모든 프로젝트에서이를 사용합니다. –