我的iOS应用程序中有以下测试用例:
-(void) testTwoDefaultUsersExist
{
NSString * expected;
NSString * actual;
expected = @"John Smith";
actual = [[[userService getAllUsers]objectAtIndex:0] fullName];
STAssertEqualObjects(expected, actual, @"Not equal");
expected = @"Dave Brown";
actual = [[[userService getAllUsers]objectAtIndex:1] fullName];
STAssertEqualObjects(expected, actual, @"Not equal");
}
以上只是检查我对[userService getAllUsers]
的调用是否返回2个用户对象,一个名为John Smith,另一个名称为Dave Brown。这似乎适用于这种情况,但我有其他情况,其顺序可能会改变,所以约翰可能被放置在索引1而不是0
问题:如何判断从NSMutableArray
调用返回的[userService getAllUsers]
是否包含这两个对象,无论是否排序?
答案 0 :(得分:1)
你能不能简单地使用NSArray方法-containsObject:
? NSMutableArray仍然是NSArray,所以你可以这样做:
NSArray * expected = [NSArray arrayWithObjects:@"John Smith", @"Dave Brown", nil];
NSArray * actual = [[userService getAllUsers] valueForKey:@"fullName"];
for(NSString * name in expected) {
STAssertTrue([actual containsObject:name], @"Missing name");
}
注意(ab)使用-valueForKey:
将用户对象数组转换为NSString对象数组,使-containsObject:
调用更简单。这仅在您的用户对象符合fullName
属性的键值编码时才有效。
答案 1 :(得分:0)
NSMutableArray在将数据插入数组时始终包含元素
您可以迭代插入的元素并使用以下方法测试它们是否在NSArray中:
- (NSUInteger)indexOfObject:(id)anObject
如果找不到该对象,则返回NSNotFound,可以与您选择的单元测试框架一起使用
问候
答案 2 :(得分:0)
像这样断言平等
NSAssert1([userService getAllUsers].count == 2, @"SomeDescription", nil);
如果要搜索数组中是否存在某些字符串,请使用以下函数
- (BOOL) containsAllNames:(NSArray*)arrToSearch namesToSearch:(NSArray*)arr
{
BOOL containsAll = YES;
for (NSString *name in arr) {
BOOL containsCurrent = NO;
for (NSString *nameToSearch in arrToSearch) {
if ([name isEqualToString:nameToSearch]) {
containsCurrent = YES;
break;
}
}
if (!containsCurrent) {
containsAll = NO;
}
}
return containsAll;
}
称之为
NSArray *toSearch = [NSArray arrayWithObjects:@"John Smith", @"Dave Brown", nil];
[self containsAllNames:YourArray namesToSearch:toSearch];