OCUnit과 OCMock에 처음으로 익숙해졌습니다. 페이지 수를 NSArray (코어 데이터에서 채워집니다)의 수를 계산하는 UIPageControl 들어있는보기 컨트롤러가 있습니다. 이것은 다음과 같이있는 viewDidLoad 메소드에서 수행됩니다 viewedPages 및 numberOfPages 모두 정수 값을 일치OCUnit 응용 프로그램 테스트 : UIPageControl을 테스트하려고합니다 numberOfPages == NSArray 개수
- (void)ViewDidLoad {
[super viewDidLoad];
... other code ...
self.pageControl.numberOfPages = [self.viewedPages count];
self.pageControl.currentPage = 0;
NSLog(@"%d", controller.pageControl.numberOfPages);
NSLog(@"%d", [controller.viewedPages count]);
}
로그 표시, 나는 아래의 테스트를 실행 다행히도 경우 주장은 사실이다 : 그러나
- (void)testPageControl {
[controller viewDidLoad];
STAssertTrue(controller.pageControl.numberOfPages == [controller.viewedPages count], @"...");
}
앞에서 언급했듯이이 프로세스는 코어 데이터의 객체를 사용하는 배열을 사용하기 때문에 코어 데이터 요소를 효과적으로 제거하기 위해 OCMock에서 사전 정의 된 배열로 대체하기로했습니다. 그렇게함으로써 나는 지금 이해하지 못하는 결과를 얻고있다. 여기
이처럼 내 새로운 테스트는 모습입니다 : (! 큰) 무엇 나를 혼란 것은이 시나리오에서 NSLog가 viewedPages 내가 만든 모의 배열의 수를 일치 계산 것을 알 수 있다는 것입니다- (void)testPageControl {
id mock = [OCMockObject partialMockForObject:controller];
NSArray *mockPagesArray = [NSArray alloc] initWithObjects:...];
[[[mock stub] andReturn:mockPagesArray] viewedPages];
[controller viewDidLoad];
NSLog(@"%d", [controller.pageControl numberOfPages]);
NSLog(@"%d", [controller.viewedPages count]);
STAssertTrue(controller.pageControl.numberOfPages == [controller.viewedPages count], @"...");
[mockPagesArray release];
}
하지만, numberOfPages는 항상 0입니까? 결과적으로 테스트가 실패합니다.
는 또한,[[[mock stub] andCall:@selector(createMockPageViews) onObject:self] loadPageViews];
그러나, 즉 미리 정의 된 배열을 반환 테스트 컨트롤러에서 로컬 함수와 컨트롤러의 viewedPages 배열을로드하는 기능을 스위 즐링 노력이 정확히 있었다 위와 같은 결과. numberOfPages가 0을 반환하기 때문에 테스트는 여전히 실패합니다. 반면에 viewedPages 배열은 예상 된 횟수를 보여줍니다.
은 내가 OCUnit 및 OCMock에 새로 온 사람, 그래서이 질문은 가능한 한 상세하고 의미가 희망 말했듯이. 나는 누군가가 나를 교정 할 수있는 OCMock이 어떻게 작동하는지에 대한 내 의견을 오해하고 있기를 바라고 있습니다 - 저는 영원히 감사 할 것입니다! 초보자를위한 OCUnit과 OCMock은 불행히도 배울 점이 없으며,이 작은 문제로 인해 이틀 동안 나를 미치게 만들었습니다 ...
미리 감사드립니다.
당신은 mock''에서 컨트롤러의 실물 크기의 모형을 만들었습니다하지만 당신은 여전히'controller'에 운영하고 있습니다
또는, UIPageControl 개체를 조롱 할 수있다. –
폴 감사합니다. 나는 아직도 약간 혼란 스럽다. & nbsp 두 개의 다른 객체 인 경우, 컨트롤러가 조회 한 Pages 개수가 Mock 객체에 대해 설정 한 (새로운) 개수와 일치하지 않기 때문에 당신이 정교 할 수 있기를 바랄까? 모의를 만들지 않고 나는 두 가지 기록을 가지고있다. 객체를 모의하고 loadViewedPages 메서드를 사용하면 컨트롤러와 모의 객체가 모두 서로 다른 객체 인 경우 나를 놀라게하는 세 개의 레코드를 표시합니다. 다시 말하지만, 이것은 분명히 내 부분에 대한 오해가 될 것이며, 발견 한 문서는 나를 도왔다. 건배! –
방금 다음과 같이 시도했지만 여전히 동일한 결과가 나타납니다. '[mock viewDidLoad]; NSLog (@ "% d", [[mock pageControl] numberOfPages]); NSLog (@ "% d", [요리사 수 계산]), 정말 혼란스럽고 도움이된다. –