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]);
}
Ответы
Ответ 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}€")
Он проходит.