Сравнение NSArray в ocUnit - PullRequest
       4

Сравнение NSArray в ocUnit

6 голосов
/ 30 января 2011

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

Приведенный ниже тест просто запрашивает у тестируемой системы (sut) массив вreturn

- (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;
}

И все же, когда тест запускается, я получаю ошибку.Как мне сравнить эти объекты, чтобы увидеть, являются ли они одинаковыми или нет?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 30 января 2011

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

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

2 голосов
/ 30 января 2011

Возможно, вы захотите что-то вроде:

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

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

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

1 голос
/ 30 января 2011

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

...