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代わりに使用していましたが、メソッド onSTAssertEqualObjectsを呼び出していませんでした。isEqualPeriod

私は2つのことを理解したいだけです:

  • これら2つの方法の違いは何ですか?
  • isEqualとはどう違いisEqualToますか?
4

1 に答える 1

6

STAssertEquals渡された 2 つのパラメーターを構成する raw バイトを比較し、スカラー型 ( floatintcharなど) で使用することを意図しています。structsまたはunions---Objective-C オブジェクトの比較には使用しないでください。STAssertEqualObjectsを呼び出して 2 つの Objective-C オブジェクトを比較しますisEqual:

isEqualTo:をサポートするために使用されNSSpecifierTestます (「NSComparisonMethodsプロトコル リファレンス」を参照)。isEqualTo:オブジェクトがスクリプト可能でない場合、実装を提供する必要はありません。

于 2013-04-26T02:14:54.773 に答える