STAssertEqualObjects和STAssertEquals有什么区别?

时间:2013-04-26 01:19:22

标签: objective-c unit-testing ocunit

我有以下课程:

#import "Period.h"

@implementation Period

...

- (BOOL)isEqualTo:(id)object {
    return [self isEqual:object];
}

- (BOOL)isEqual:(id)object {

    if (object == self) {
        return YES;
    }

    if ([[object beginDate] hash] == [[self beginDate] hash] &&
        [[object endDate] hash] == [[self endDate] hash]) {
        return YES;
    }

    return NO;
}

...

@end

还有以下测试,使用OCUnit编写:

Period *period;
NSDate *beginDate;
NSDate *endDate;

- (void)setUp {
    beginDate = [NSDate dateWithString:@"2011-02-25"];
    endDate = [NSDate dateWithString:@"2011-03-25"];

    period = [[Period alloc] initWithBeginDate:beginDate
                                       endDate:endDate];
}

- (void)testEndDateShouldBeGreaterOrEqualThanBeginDate {
    Period *newPeriod = [[Period alloc] initWithBeginDate:beginDate
                                                  endDate:beginDate];

    STAssertEqualObjects(beginDate, [newPeriod beginDate], @"Begin dates are different");
    STAssertEqualObjects(endDate, [newPeriod endDate], @"End dates are different");
}

之前我使用的是STAssertEquals而不是STAssertEqualObjects,并且没有在isEqual上调用Period方法。

我只想了解两件事:

  • 这两种方法的区别是什么?
  • isEqualisEqualTo之间的区别是什么?

1 个答案:

答案 0 :(得分:6)

STAssertEquals比较构成传递给它的两个参数的原始字节,并用于标量类型(floatint,{{1} },等等,charstructs ---你不应该用它来比较Objective-C对象。 unions通过调用STAssertEqualObjects来比较两个Objective-C对象。

isEqual:用于支持NSSpecifierTest(请参阅NSComparisonMethods Protocol Reference)。如果您的对象不是可编写脚本的,则无需为isEqualTo:提供实现。