我有一个愚蠢的问题,我刚开始使用cocoa测试,我想测试一个返回NSArray
NSRange
作为元素的方法。
XCTAssert(ranges[0].location == 500, @"Value found is wrong");
这是失败的,因为在id类型的对象上找不到属性位置,但我无法转换(NSRange)
,因为它是一个结构。
我的示例数组:
<__NSArrayM 0x600000050680>(
NSRange: {500, 101}
)
如何让这个数组值得进行测试?
答案 0 :(得分:3)
由于NSRange
不是Objective-C 对象,因此无法将它们存储在Objective-C集合类中,因此需要将它们包装到NSValue
对象中
完成此操作后,您的测试将变为:
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");