【问题标题】:How to assert that a function returns an array如何断言一个函数返回一个数组
【发布时间】:2016-08-04 15:44:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • [first isKindOfClass:[NSArray class]] 会起作用吗?
  • @JohnFarkerson 你是对的,我很抱歉。我没有通过应用程序看到你的。我纠正了我的错误。
  • 不用担心,谢谢伙计 :)

标签: ios objective-c arrays unit-testing xctest


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    简单地说:

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

    【讨论】:

      【解决方案3】:

      只需检查返回对象的类,如下所示:

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

      您也可以检查 array.count,或者它是否包含使用 containsObject: 方法的特定对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 2011-06-23
        • 2012-04-01
        • 1970-01-01
        • 2017-12-19
        • 2011-07-14
        • 1970-01-01
        相关资源
        最近更新 更多