【问题标题】:Doing a compare of NSArray in ocUnit在 ocUnit 中比较 NSArray
【发布时间】: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;
}

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

提前谢谢你

【问题讨论】:

    标签: objective-c unit-testing ocunit


    【解决方案1】:

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

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

    【讨论】:

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

    你可能想要这样的东西:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多