在测试中投射NSRange?

时间:2014-02-13 10:05:16

标签: objective-c cocoa unit-testing

我有一个愚蠢的问题,我刚开始使用cocoa测试,我想测试一个返回NSArray NSRange作为元素的方法。

XCTAssert(ranges[0].location == 500, @"Value found is wrong");

这是失败的,因为在id类型的对象上找不到属性位置,但我无法转换(NSRange),因为它是一个结构。

我的示例数组:

<__NSArrayM 0x600000050680>( NSRange: {500, 101} )

如何让这个数组值得进行测试?

2 个答案:

答案 0 :(得分:3)

由于NSRange不是Objective-C 对象,因此无法将它们存储在Objective-C集合类中,因此需要将它们包装到NSValue对象中

请参阅[NSValue valueWithRange:]

完成此操作后,您的测试将变为:

XCTAssert([ranges[0] rangeValue].location == 500, @"Value found is wrong");

或者更好的是,您可以在错误日志中看到预期值和实际值:

XCTAssertEqual([ranges[0] rangeValue].location, 500, @"Value found is wrong");

答案 1 :(得分:1)

NSRange应位于数组内的NSValue内,因此您需要在访问location之前提取范围。

NSValue *value = (NSValue *)ranges[0];
NSRange range = [value rangeValue];

XCTAssert(range.location == 500, @"Value found is wrong");