在 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 在您的情况下比较对象指针并失败,因为 resultexpected不同 对象(它们的指针不同)。

【讨论】:

在我看来,这比公认的答案更好。如果数组不同,断言失败时会打印两者的内容,这通常很有帮助。【参考方案2】:

你可能想要这样的东西:

STAssertTrue([result isEqual: expected], @"This test failed");

如果每个项目的 isEqual 实现没有返回 true,这将遍历数组并返回 false。如果您的数组成员是指定的 NSStrings,那么您应该很高兴。

正如其他人所说,在 Objective-C 中,== 意味着指针相等而不是值等价。

【讨论】:

【参考方案3】:

您要比较的是 expectedresult 是否指向同一个数组,显然它们不是。相反,为了比较内容,您需要通过 NSArrays 并使用对象的比较函数逐个对象进行比较。

【讨论】:

以上是关于在 ocUnit 中比较 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

OCUnit 应用程序测试:尝试测试 UIPageControl numberOfPages == NSArray count

在 OCUnit 中使用属性是不是安全?

如何在单元测试(OCUnit)中访问 NSDocumentDirectory

如何在命令行中捕获 OCUnit 的测试失败/成功?

你还应该在单元测试中进行内存管理吗? (OCUnit)

iPhone 上的 ocunit 测试