Подтвердить что ты не робот

XCTAssertEqual не может сравнить два строковых значения?

Я добавил простой unit test, чтобы проверить расширение строки. Но это терпит неудачу. Что я делаю здесь неправильно?

Из того, что я знаю XCTAssertEqual, является тестовое значение, а не сам объект?

Третья строка btw, говорит, что строка равна, но XCTAssertEqual говорит, что это не так.

- (void) testInitialsFromFullname {
    NSString *firstNickName = @"Mike Kain";
    NSString *expectedResult = @"MK";
    NSLog(@"Equal:%@", [[firstNickName initialsFromString] isEqualToString:expectedResult] ? @"YES" : @"NO");

    XCTAssertEqual(expectedResult, [firstNickName initialsFromString], @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);
}
4b9b3361

Ответ 1

Из документации XCTAssertEqual:

Создает сбой, когда a1 не равно a2. Этот тест предназначен для C скаляры, структуры и объединения.

Вы должны использовать XCTAssertEqualObjects (который использует isEqual: внутри) или что-то вроде:

XCTAssertTrue([[firstNickName initialsFromString] isEqualToString:expectedResult],
              @"Strings are not equal %@ %@", expectedResult, [firstNickName initialsFromString]);

Ответ 2

У меня была аналогичная проблема, которая могла бы помочь кому-то.

У меня есть функция расширения Float, которая возвращает строку. Не удалось выполнить следующий тест:

testValue = 0.01
XCTAssertEqual(testValue.formattedForCost(), "0,01 €")

Со следующим сообщением:

Assertions: XCTAssertEqual failed: ("Optional("0,01 €")") is not equal to ("Optional("0,01 €")")

Это довольно раздражает. Однако я обнаружил, что если я изменю свой тест, чтобы использовать символ unicode no-break space:

XCTAssertEqual(testValue.formattedForCost(), "0,01\u{00a0}€")

Он проходит.