Сообщения утверждения: примите отказ или примите успех

Я думаю, вы могли бы использовать что-то вроде этого ...

let filteredArray = array.compactMap { [110] as? RequiredType }

Это отфильтрует массив и вернет типизированный массив, содержащий только тот тип, который вам нужен.

Предостережение

Сказав это. В Swift вы должны избегать разнородных массивов, где это возможно. Массивы должны содержать только один тип элементов.

Небольшое тестирование кода ...

Проверено на детской площадке ...

let array: [Any] = [1, "hello", 3, 3.1415, "world"]

let filteredArray = array.compactMap { [111] as? String }

filteredArray

Вывод:

filteredArray = ["hello", "world"]

10
задан Daniel Beardsley 20 December 2008 в 08:40
поделиться

7 ответов

Важной вещью с утверждением является фактическое протестированное условие. В C можно использовать препроцессор "stringization" для вывода фактического протестированного условия. Мой код просто выводы

Assert Failed: (4-2)==2 : Line 123, File foo.c

Если Вы удачливы, можно получить дамп стека также...

3
ответ дан 3 December 2019 в 21:23
поделиться

Я не знаю то, что является общепринятой практикой, но я комбинирую Ваши первые два подхода с добавлением фактического полученного результата.

"Substracting 2 from 4 should equal 2, but equals " + value

Это не оставляет комнаты для отладки простоты и сомнения.

7
ответ дан 3 December 2019 в 21:23
поделиться

Я не знаю, существует ли какой-либо "стандарт", но в большинстве случаев мне нравится видеть само условие утверждения. C делает это автоматически. В C# у меня есть к вставке копии он, к сожалению, например.

Debug.Assert(4-2==2, "4-2==2");

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

Debug.Assert(result != null, "No result returned for input '" + input + "'");

2
ответ дан 3 December 2019 в 21:23
поделиться

Это действительно не имеет значения IMO, пока сообщение об ошибке говорит Вам, что пошло не так, как надо и где проблема. При нормальном функционировании никогда не будет замечаться сообщение утверждения. Если это замечено, существует ошибка в коде где-нибудь, и необходимо смочь разыскать и исправить ошибку.

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

1
ответ дан 3 December 2019 в 21:23
поделиться

Я рассматриваю сообщения утверждения как комментарии: Я пытаюсь не иметь их, если я могу избежать его, если я могу ясно дать понять намерение из кода.

Обычно это - проблема, когда существует несколько атрибутов, которые Вы хотите утверждать, на котором связаны в некотором роде. Извлечение утверждений в метод, названный для указания на аспект/отношения, которым Вы интересуетесь, делает это более очевидным, что продолжается без стоимости поддержания комментария/сообщения.

2
ответ дан 3 December 2019 в 21:23
поделиться

Предложение Roddy является хорошим - оно, конечно, делает "стоимость" добавления новых утверждений намного более дешевой (т.е. не требует размышления или вывода нового строкового сообщения). Хотите верьте, хотите нет, но реализация его предложения оказала значительное влияние на мое использование утверждений.

При тихом поиске более четкого текстового сообщения, тем не менее, Вы могли бы рассмотреть что-то как:

"Ожидаемый 4-2 для равенства 2"

Это, кажется, ясно дает понять (по крайней мере, мне), что ожидаемый ответ равнялся 2, но что надежда не была оправдана...

1
ответ дан 3 December 2019 в 21:23
поделиться

Я использую сообщение утверждения для документа, что утверждение тестирует, или о чем математическое ожидание.

Иногда, когда тест перестал работать, я не должен смотреть на провальный тест: только из сообщения утверждения и изменение (изменения) я просто сделал, я знаю, как зафиксировать его.

1
ответ дан 3 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: