我是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);
}
我有很多像这样的测试。我确信save
和load
函数以正确的方式工作。有些测试正在通过,有些测试失败了。是什么原因?
我希望这些对象具有相同的属性值。我必须逐一比较所有这些属性?有没有“清洁”的方式?
感谢您的时间
答案 0 :(得分:2)
其中一些人正在过世,有些人失败了。是什么原因?
这可能是因为您使用的是默认的相等比较。
我希望这些对象具有相同的属性值。我必须逐一比较所有这些属性?有没有“清洁”的方式?
是。覆盖isEquals
以逐个比较属性,XCTAssertEqualObjects
将正确进行比较:
-(BOOL)isEqual:(id)other {
...
}
不要忘记覆盖hash
:
-(NSInteger)hash {
...
}
以下是指向answer that discusses Best practices for overriding isEqual:
and hash
的链接。