2013-04-26 3 views
0

У меня есть следующий класс:В чем разница между STAssertEqualObjects и STAssertEquals?

#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.

Я просто хочу понять две вещи:

  • Какая разница между этими двумя методами?
  • В чем разница между isEqual и isEqualTo?

ответ

6

STAssertEquals сравнивает исходные байты, которые составляют два параметра, которые передаются ему, и предназначен для использования со скалярными типами (float, int, char и т.д.), structs или unions --- вам не следует использовать его для сравнения объектов Objective-C. STAssertEqualObjects сравнивает два объекта Objective-C, вызывая isEqual:.

isEqualTo: используется для поддержки NSSpecifierTest (см. NSComparisonMethods Protocol Reference). Нет необходимости предоставлять реализацию для isEqualTo:, если ваши объекты не доступны для сценариев.

 Смежные вопросы

  • Нет связанных вопросов^_^