2011-01-30 3 views
6

Я новичок в ocUnit, и я пытаюсь сравнить 2 массива с методом STAssertTrue и == для равенства.Выполнение сравнения NSArray в ocUnit

Испытание ниже просто просит тестируемой системы (SUT) для массива взамен

- (void) testParse { 
    SomeClassForTesting* sut = [[SomeClassForTesting alloc] init]; 
    NSArray* result = [sut parseAndReturn]; 

    NSArray* expected = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 

    STAssertTrue(result == expected, @"This test failed"); 
} 

Затем в моем рабочем коде я просто возвращает тот же массив

- (NSArray *)parseAndReturn 
{ 
    NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 
    return x; 
} 

Но когда тест Я получаю сбой. Как сравнить эти объекты, чтобы убедиться, что они одинаковые или нет?

Спасибо заранее

ответ

2

Вы, вероятно, хотите что-то вроде:

STAssertTrue([result isEqual: expected], @"This test failed"); 

Это будет пройти через массивы и возвращает ложь, если каждый элемент не возвращает истину от ее реализации IsEqual. Если ваши члены массива являются NSStrings, как указано, вы должны быть хорошими.

Как сказал другой человек, в Objective-C подразумевается равенство указателя, а не эквивалентность значений.

1

То, что вы сравниваете, ожидается ли и результат указывают на тот же массив, что они, очевидно, не являются. Вместо этого для сравнения содержимого вам необходимо пройти через NSArrays и сравнить объект по объекту с помощью функции сравнения объекта.

3

Существует макрос STAssertEqualObjects, который использует для сравнения объектов -isEqual:. Я думаю, это именно то, что вам нужно.

STAssertTrue в вашем случае сравнивает объект указатели и не потому, что result и expectedявляются различными объектов (их указатели различны).

+0

По-моему, это лучший подход, чем принятый ответ. Если массивы отличаются друг от друга, содержимое обоих будет напечатано, когда утверждение не будет выполнено, что обычно полезно. –

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