6

我是 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;
}

然而,当测试运行时,我失败了。我应该如何比较这些对象以查看它们是否相同?

先感谢您

4

3 回答 3

3

有一个STAssertEqualObjects用于-isEqual:对象比较的宏。我认为这正是你所需要的。

STAssertTrue在您的情况下,比较对象指针并失败,因为resultandexpected不同的对象(它们的指针不同)。

于 2011-01-30T07:39:24.590 回答
2

你可能想要这样的东西:

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

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

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

于 2011-01-30T03:57:16.130 回答
1

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

于 2011-01-30T02:02:01.973 回答