我与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