2

我的 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。这似乎适用于这种情况,但我在其他情况下排序可能会改变,所以 John 可能被放置在索引 1 而不是 0

问题:我如何断言NSMutableArray从调用返回的 ,[userService getAllUsers]包含这 2 个对象,而不管顺序如何?

4

3 回答 3

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

于 2012-06-25T14:27:37.363 回答
0
  1. NSMutableArray 在将元素插入数组时始终包含它们

  2. 您可以使用以下方法迭代您插入的元素并测试它们是否位于 NSArray 中:

- (NSUInteger)indexOfObject:(id)anObject

如果找不到对象,则返回 NSNotFound,可以与您选择的单元测试框架一起使用

问候

于 2012-06-25T13:56:41.003 回答
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];
于 2012-06-25T13:56:47.933 回答