Я не верю, что подход «черного ящика» абсолютно верен.
Мое мышление будет выглядеть так:
A). Посмотрите на входы. Подумайте, как человек может посылать плохие вещи. Примеры:
- Нулевая ссылка
- Пустая строка
- Очень длинная строка
- Строка со всеми цифрами
- Строка со странными знаками препинания
- Строка с непечатными или странными наборами символов
В каждом случае вам необходимо знать ожидаемый результат - это формальное определение того, что является «правильным». В этой степени вы проводите тестирование черного ящика. Вы не хотите знать, что делает код, вы хотите знать, что он должен делать.
* * 1 022 В). Но теперь мы открываем коробку. Вы смотрите на код и ищите различные его ветви. Ваши тесты тренируют эти ветви? Есть инструменты покрытия для анализа ваших тестов. Предположим, у вас был особый случай: если взять глупый пример, слово MY-SPECIAL-SYMBOL подвергается какой-то специальной обработке, для этого есть «Если». Ваш тестовый пример должен включать это в качестве входных данных. Часто такие угловые случаи можно найти, только взглянув на код. (Да, спецификация должна сказать вам, но разработчики часто находят интересные дополнения, так что посмотрите на код.
С). Как насчет побочных эффектов? Предположим, что этот метод должен обновлять кэш для каждого найденного символа. Это формальное требование компонента, и все же интерфейс этого не говорит. Снова вы идете в черный ящик. Поэтому здесь вы можете использовать mocks, чтобы убедиться, что компонент в свою очередь передал правильные данные в API кеша.