比较objective-c单元测试断言中的两个对象

时间:2014-11-07 19:07:06

标签: ios objective-c unit-testing

我是Objective-C测试的新手,但我在使用MSTest的.NET方面有一些经验。

使用XCTAssert比较目标C中两个对象的最佳方法是什么?

示例代码如下:

- (void)testNumericValue_SaveAndLoad_ShouldSaveAndThenLoadIdenticalObject
{
    [_numericValue_1 saveToDatabaseWithKey:VALID_KEY_1];
    NumericValue *tmpNumericValue = [[NumericValue alloc] loadFromDatabaseWithKey:VALID_KEY_1];

    XCTAssertEqualObjects(tmpNumericValue, _numericValue_1);
}

- (void)testLoop_SaveAndLoad_ShouldSaveAndThenLoadIdenticalObject
{
    [_loop_1 saveToDatabase];
    Loop *tmpLoop = [[Loop alloc] loadFromDatabase];

    XCTAssertEqualObjects(tmpLoop, _loop_1);
}

我有很多像这样的测试。我确信saveload函数以正确的方式工作。有些测试正在通过,有些测试失败了。是什么原因? 我希望这些对象具有相同的属性值。我必须逐一比较所有这些属性?有没有“清洁”的方式?

感谢您的时间

1 个答案:

答案 0 :(得分:2)

  

其中一些人正在过世,有些人失败了。是什么原因?

这可能是因为您使用的是默认的相等比较。

  

我希望这些对象具有相同的属性值。我必须逐一比较所有这些属性?有没有“清洁”的方式?

是。覆盖isEquals以逐个比较属性,XCTAssertEqualObjects将正确进行比较:

-(BOOL)isEqual:(id)other {
     ...
}

不要忘记覆盖hash

-(NSInteger)hash {
    ...
}

以下是指向answer that discusses Best practices for overriding isEqual: and hash的链接。