다음 내가 테스트하려고하는 방법의 일부가 될 때 다음과 같이아이폰 OS - 단위 테스트 Asynchoronous 코드
- (void)configureTableFooterView {
dispatch_async(dispatch_get_main_queue(), ^{
self.tableView.tableFooterView = nil;
if ([self.parser.resultSet isLastPage]) {
return;
}
});
}
내가 단위 테스트를 작성했습니다 :
- (void)testTableFooterViewConfigurationAfterLastPageLoaded {
id mockTableView = OCMClassMock([GMGFlatTableView class]);
OCMExpect([mockTableView setTableFooterView:[OCMArg isNil]]);
id resultSet = OCMClassMock([GMGResultSetInfo class]);
OCMStub([resultSet isLastPage]).andReturn(YES);
OCMStub([self.mockParser resultSet]).andReturn(resultSet);
id partialMockSUT = OCMPartialMock(self.sut);
OCMStub([partialMockSUT tableView]).andReturn(mockTableView);
[self.sut configureTableFooterView];
OCMVerifyAllWithDelay(mockTableView, 2.0);
//OCMVerifyAllWithDelay(partialMockSUT, 2.0);
}
나는 다른이 주 스레드의 dispatch_async 호출에서와 동일한 것을 테스트하는 동일한 클래스에서 테스트합니다. 해당 테스트의 테스트 예상 및 검증 설정이이 테스트와 일치합니다. 테스트가 통과하는 동안 지연된 확인 단계에서 무한 루프에 빠지게됩니다.
흥미롭게도이 1 테스트 만 실행하면 문제가 발생하지 않습니다. 이 테스트가 다른 테스트와 함께 실행될 때만 문제가 표시됩니다.
UPDATE : 이것은 훨씬 더 관련 게시물입니다
In unit test, execute the block passed in queue with dispatch_asyc
. 그러나이 거의 원래의 시험 방법과 동일한 방법으로 실패
- (void)testTableFooterViewConfigurationAfterLastPageLoaded {
id mockTableView = OCMClassMock([GMGFlatTableView class]);
OCMExpect([mockTableView setTableFooterView:[OCMArg isNil]]);
id resultSet = OCMClassMock([GMGResultSetInfo class]);
OCMStub([resultSet isLastPage]).andReturn(YES);
OCMStub([self.mockParser resultSet]).andReturn(resultSet);
id partialMockSUT = OCMPartialMock(self.sut);
OCMStub([partialMockSUT tableView]).andReturn(mockTableView);
[self.sut configureTableFooterView];
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
OCMVerifyAll(mockTableView);
}
NSRunLoop와 라인이 스위트 룸으로 실행할 때 EXC_BAD_ACCESS와 충돌하지만 혼자 잘 실행!
http://stackoverflow.com/questions/18667355/how-to-test-async-method-in-block-using-ocmock을 확인 했습니까? – jcaron
이것은 UI 테스트에 더 적합하다는 것을 알아 두십시오. 단위 테스트가 아닙니다. – Cristik
@Cristik 저는 테스트하지만 테스트 방법은 상당히 독립적이며 단위 테스트를 사용하여 올바르게 작동하는지 확인하려고합니다. UI 테스트는 메서드가 UI 흐름에서 올바르게 호출되는지 확인합니다. 그러나, 문제는 일반적으로 GCD로 일반화 될 수 있으므로 내 질문은 –