2016-08-04 130 views
1

我第一次编写iOS单元测试,并遇到一些麻烦。当我用PHP编写单元测试时,我还可以断言函数的返回值是 - 比方说 - 一个数组。如何声明一个函数返回一个数组

下面的代码工作,但这可能不是最好的方式来做到这一点,因为数组的内容可能会改变。

NSArray *first = [Example getArray]; 
NSArray *second = @[@"test", @"test2"]; 

XCTAssertEqualObjects(first, second, @"Example:getArray doesn't return an array."); 

在Objective-C中这样做的正确方法是什么?

+0

会[第一isKindOfClass:[NSArray的类]工作? –

+0

@JohnFarkerson你是对的,我很抱歉。我没有看到你的应用程序。我纠正了我的错误。 – user4992124

+0

不用担心,谢谢你:) –

回答

0

简单地说:

XTCAssert([first isKindOfClass:[NSArray class]], @"First isn't an array"); 
+0

@Downvoter想发表评论吗? –

0

您只需查看返回对象的类,像这样:

XCTAssertTrue([first isKindOfClass:[NSArray class]], @"Example:getArray doesn't return an array."); 

你也可以检查array.count,或者如果它包含某些对象containsObject:方法。

2

要测试该方法是否返回特定的类,可以使用isKindOfClass来测试对象的类型。

XCTAssertTrue([first isKindOfClass:[NSArray class]], @"..."); 

如果你还想测试数组的内容,那么你有一些选择。

  • 您可以对数组的内容进行排序,以便两个数组的顺序相同。请参阅this SO post以不同的方式对数组进行排序。

    // let's say your arrays contains objects that have a name property 
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
    NSArray *sortedFirst = [first sortedArrayUsingDescriptors]; 
    NSArray *sortedFirst = [first sortedArrayUsingDescriptors]; 
    XCTAssertEqualObjects(sortedFirst, sortedSecond, @"..."); 
    
  • 您可以创建数组的NSSet。与NSSet,平等只会看你是否在集合中有相同的对象,而不是它们出现的顺序。这只适用于永远不会包含重复对象的数组。如果从具有重复对象的数组中创建一个集合,那么这些对象中只有一个实例将在集合中。

    NSSet *firstSet = [NSSet setWithArray:first]; 
    NSSet *secondSet = [NSSet setWithArray:second]; 
    XCTAssertEqualObjects(firstSet, secondSet, @"..."); 
    
  • 您可以比较数组中的对象数。这不是一个非常精细的测试,但它比仅比较类型提供了更细化的测试。

    XCTAssertEqual(first.count, second.count, @"..."); 
    
相关问题