我與Objective-C的單元測試開始,我需要知道如何與OCMockito和Xcode的6和Xcode 6和OCMockito
我測試的交互器試塊,這個交互器應該返回一個數組作爲塊參數,我必須要求提供者文件中的元素。
這是我要測試的方法:
- (void)userPoiListsWithSuccessBlock:(MNBSavePoisInteractorSuccess)success {
self.poiListEntityArray = [self.poiListProvider poiListsForUser:self.loggedUser];
self.poiListViewObjectArray = [self viewPoiListObjectListWithPoiLists:self.poiListEntityArray];
success(self.poiListViewObjectArray);
}
首先,我安裝,我要的元素使用
self.mockPoiListProvider = mock([PoiListProvider class]);
self.sut = [[MNBSavePoisInteractor alloc] initWithManagedObjectContext:self.coreDataStack.managedObjectContext andPoiListProvider:self.mockPoiListProvider];
- (UserEntity *)loggedUserMock {
UserEntity *mockLoggedUser = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([UserEntity class]) inManagedObjectContext:self.coreDataStack.managedObjectContext];
[email protected]"1";
[email protected]"user";
[email protected];
return mockLoggedUser;
}
- (InMemoryCoreDataStack *)coreDataStack{
if (!_coreDataStack) {
_coreDataStack = [[InMemoryCoreDataStack alloc] init];
}
return _coreDataStack;
}
- (PoiListEntity *)poiListFake {
PoiListEntity *fake = [NSEntityDescription insertNewObjectForEntityForName:@"PoiListEntity" inManagedObjectContext:self.coreDataStack.managedObjectContext];
fake.name = @"Test";
fake.poisCount = @2;
[fake addContributorsObject:[self loggedUserMock]];
return fake;
}
於是,我做了測試。我使用Xcode 6 waitForExpectation
來管理異步方法。我認爲我做錯了什麼。
- (void)waitForExpectation {
[self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {
if (error) {
NSLog(@"Timeout Error: %@", error);
}
}];
}
- (void)testShouldReturnPoiLists {
XCTestExpectation *expectation = [self expectationWithDescription:@"Waiting method ends"];
[given([self.mockPoiListProvider poiListsForUser:[self loggedUserMock]]) willReturn:@[[self poiListFake]]];
[self.sut userPoiListsWithSuccessBlock:^(NSArray *results) {
[expectation fulfill];
XCTAssert(resutls.count == 1, @"Results %zd", resutls.count);
}];
[self waitForExpectation];
}
我明白,如果我給在willReturn對象在給定的方法,當我打電話,我想測試它應該返回我以前給SUT方法。真的嗎? 謝謝
我不明白你的測試方的意圖,因爲我不明白被測方法的意圖。你能解釋一下'-userPoiListsWithSuccessBlock:'是什麼,你想測試什麼? – 2015-02-07 20:54:22
對不起@JonReid,實際上這不是真正的方法。我已經更新了它。這個方法返回一個''的數組。該陣列有兩種符合協議的對象。 PoiListProvider方法返回實體項目。第二種方法返回'',它們是我從實體和三個自定義對象轉換而來的'Ponsos'。我想測試結果數組是否具有我需要的相同數量的對象。我想如果我用這個實體設置'willReturn',我會在該塊中捕獲它。我很抱歉,我不明白我應該怎麼做這個測試 –
croigsalvador
2015-02-09 19:48:48