使用 NSArray 的 STAsertEquals 检查 NSArray 项目计数的正确方法是什么。
以下预计会起作用:
...
STAssertEquals(1, [myArray count], @"One item should be in array");
此代码在运行测试时会产生“类型不匹配”运行时错误。
相反,我必须对 NSUInteger 进行显式转换:
STAssertEquals((NSUInteger)1, [myArray count], @"One item should be in array");
这有效 - 但由于显式转换看起来有点丑。
我还想避免使用 STAsertTrue,因为 STAssertEquals 看起来更合适(我们比较两个值)并显示实际值和预期值。
在 Objective-C 中检查它的正确方法是什么?
更新 1
感谢建议使用 1u 作为 unsigned int 文字的答案
STAssertEquals(1u, [myArray count], @"One item should be in array");
但正如@Aaron 提到的那样,它仍然很难看 - 我想直接使用“1” - 现在考虑使用 myArray.count == 1 代替。原因是1u看起来不太干净。 1对我来说是1。您从不在数学中写 1u :-) 还有其他建议吗?
更新 2
正如@H2CO3 提到的,1u 甚至不能总是工作,并且正如某些线程中所建议的那样,我们可以对预期值使用更多的声明性定义,这将解决转换问题:
NSUInteger expectedItemsCount = 1;
STAssertEquals(expectedItemsCount, [myArray count], @"One item should be in array");
我更喜欢它而不是 1u 解决方案,因为它看起来更干净。但是这种方法的缺点是我们有额外的行并且代码不是很紧凑。所以看起来我们必须在两种方法之间进行选择:(NSUInteger)1
和 NSUInteger expectedItemsCount = 1;
最佳答案
C 的类型系统...
1
是 int
,所以它是有符号的。 NSArray.count
是 NSUInteger
所以它是无符号的。使整数文字无符号:
STAssertEquals(myArray.count, 1u, @"+1 item needed");
编辑:更好的是,上面的代码在 64 位上会失败(它可以在 1ull
那里工作),所以如果你只使用像
const NSUInteger expectedLength = 1;
STAssertEquals(myArray.count, expectedLength, @"+1 item needed");
关于objective-c - 用于检查 NSArray 计数的 STAssertEquals - 干净的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600353/