ios - 如何断言函数返回数组

标签 ios objective-c arrays unit-testing xctest

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

下面的代码有效,但这可能不是最好的方法,因为数组的内容可能会改变。

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

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

在 Objective-C 中执行此操作的正确方法是什么?

最佳答案

要测试该方法是否返回特定类,您可以使用 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, @"...");
    

关于ios - 如何断言函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771905/

相关文章:

javascript - 搜索多维数组 JavaScript

ios - 如何使用 MapKit 显示该地区多家医院的注释?

iphone - 使用 Xcode 创建无线 list 文件(.plist 扩展名)

Objective-C - 定义一个枚举,可以像 ENUMTYPE.ENUMVAL 一样调用

ios - 如何使用 AFNetworking 发送 HTTP POST 请求?

javascript - 如何在代码结束后将输入永久存储到数组中?

javascript - 我的 JavaScript 函数在未被调用的情况下运行

ios - 当我在 Swift 中从音乐库中选择一首歌曲时,为什么我的应用程序会崩溃?

ios - VoIP、PushKit 和应用程序唤醒

ios - 如何实现 "drag right to dismiss"导航堆栈中的 View Controller ?