在 ocUnit 中比较 NSArray
Posted
技术标签:
【中文标题】在 ocUnit 中比较 NSArray【英文标题】:Doing a compare of NSArray in ocUnit 【发布时间】:2011-01-30 01:57:22 【问题描述】:我是 ocUnit 的新手,我正在尝试将 2 个数组与 STAssertTrue 方法和 == 进行比较。
下面的测试只是向被测系统(sut)询问数组作为回报
- (void) testParse
SomeClassForTesting* sut = [[SomeClassForTesting alloc] init];
NSArray* result = [sut parseAndReturn];
NSArray* expected = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil];
STAssertTrue(result == expected, @"This test failed");
然后在我的生产代码中,我只是返回相同的数组
- (NSArray *)parseAndReturn
NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil];
return x;
然而,当测试运行时,我遇到了失败。我应该如何比较这些对象以查看它们是否相同?
提前谢谢你
【问题讨论】:
【参考方案1】:有一个宏 STAssertEqualObjects
使用 -isEqual:
进行对象比较。我认为这正是您所需要的。
STAssertTrue
在您的情况下比较对象指针并失败,因为 result
和 expected
是 不同 对象(它们的指针不同)。
【讨论】:
在我看来,这比公认的答案更好。如果数组不同,断言失败时会打印两者的内容,这通常很有帮助。【参考方案2】:你可能想要这样的东西:
STAssertTrue([result isEqual: expected], @"This test failed");
如果每个项目的 isEqual 实现没有返回 true,这将遍历数组并返回 false。如果您的数组成员是指定的 NSStrings,那么您应该很高兴。
正如其他人所说,在 Objective-C 中,== 意味着指针相等而不是值等价。
【讨论】:
【参考方案3】:您要比较的是 expected 和 result 是否指向同一个数组,显然它们不是。相反,为了比较内容,您需要通过 NSArrays 并使用对象的比较函数逐个对象进行比较。
【讨论】:
以上是关于在 ocUnit 中比较 NSArray的主要内容,如果未能解决你的问题,请参考以下文章
OCUnit 应用程序测试:尝试测试 UIPageControl numberOfPages == NSArray count