0

我有以下课程:

#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它没有isEqualPeriod.

我只想明白两点:

  • 这两种方法有什么区别?
  • isEqual和有什么区别isEqualTo
4

1 回答 1

6

STAssertEquals比较构成传递给它的两个参数的原始字节,并且旨在与标量类型(float, int,char等)一起使用,structs或者unions--- 你不应该使用它来比较 Objective-C 对象。STAssertEqualObjects通过调用比较两个 Objective-C 对象isEqual:

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

于 2013-04-26T02:14:54.773 回答