Я пишу тест на обнаружение для Cocoa API, поскольку я наращиваю все, что связано с Mac. В настоящее время я пытаюсь найти лучший метод для URL-кодирования строки. Используя панель инструментов Google для Mac, у меня есть модульный тест, в котором намеренно вызывает сбой:
NSString* expected = @"ab%%20c";
NSString* encoded = @"ab c";
STAssertEqualStrings(expected, encoded, @"Expected [%s] actual [%s]", [expected UTF8String], [encoded UTF8String]);
и он жалуется: «ab P! = ab c» Мусор, который он сбрасывает на выходе, выбрасывает меня. Как будто знак процента неправильно экранирован, но я знаю, что это так. Мой главный вопрос: как мне получить правильно оформленное сообщение об ошибке, чтобы я мог быть уверен, что имею дело с яблоками, а не с апельсинами?
*Обновить Stackoverflow удалял мусор в моем исходном сообщении. Вышеупомянутая ошибка преднамеренно, чтобы проиллюстрировать проблему с сообщением об ошибке. Меня беспокоит мусор, который отображается в сообщении об ошибке, поскольку он четко не детализирует, что находится в фактической строке. Ошибка говорит что-то вроде «утверждение не выполнено ab [символ яблока] c! = Ab c», где я получаю в сообщении символ яблока вместо знака процента. На практике кодируется возврат вызова метода, и я хотел бы проверить, используя сообщение об ошибке утверждения, содержимое строки.
См. Обновление выше для ясности.
Я забыл, почему у меня здесь были проблемы. Если вы видите, я конвертирую строки NSStrings в строки C встроенными перед интерполяцией значений, которые добавляли ненужную сложность. Теперь это не проблема, поскольку Xcode менялся несколько раз.





Вы путаете экранирование обратной косой черты, которое применяется во время компиляции, с экранированием знака процента, которое применяется к форматной строке с помощью функций и методов, подобных printf. Поскольку expected не обрабатывается такой функцией, знаки процента ничего не экранируют.
Тем не менее, если StackOverflow не искажает ваше сообщение, знаки процента должны присутствовать в «ab %% c! = Ab c».
Я не уверен, что понимаю вопрос. Ожидаемое не равно закодированному, поэтому утверждение не выполняется. Похоже, все работает правильно. Или я что-то упускаю?