Когда кто-то говорит «проверить только публичный API», что именно он подразумевает под «публичным API»? - PullRequest
0 голосов
/ 03 октября 2018

Например, для данного приложения с графическим интерфейсом, такого как текстовый процессор, является ли публичный API самим графическим интерфейсом?Означает ли тестирование общедоступного API-интерфейса тогда написание тестов, которые запускают приложение и манипулируют мышью и клавиатурой для нажатия кнопок?Я предполагаю, что вы не должны анализировать графический интерфейс пользователя, чтобы протестировать ожидаемые результаты, как это сделал бы настоящий пользователь.

Публичный API для библиотеки кажется немного более простым.Я предполагаю, что это функции и классы, которые доступны, когда библиотека импортируется в другой проект.

Как насчет библиотеки, написанной в функциональной парадигме?Процедурный?Объектно-ориентированный?А как насчет языков без явного публичного и частного деления?

По сути: можно ли описать термин «публичный API» в зависимости от языка, парадигмы и приложения, с минимальным жаргоном?Примеры могут быть полезны.

1 Ответ

0 голосов
/ 03 октября 2018

"для данного приложения графического интерфейса, такого как текстовый процессор, является ли общедоступный API самим графическим интерфейсом?" .Нет, проблема, с которой вы столкнулись, заключается в том, что вы смотрите на «общую картину», не принимая во внимание область применения модульного тестирования.

Тег StackOverflow определяет его как: " Модульное тестирование - это метод, с помощью которого отдельные блоки исходного кода тестируются, чтобы определить, пригодны ли они для использования ".С этой точки зрения выражение имеет смысл, потому что вы тестируете каждый отдельный класс.Если существует хорошее разделение интересов, большинство этих классов даже не осознают, что они являются частью «текстового процессора».

Идея состоит в том, что вы должны тестировать этот класс исключительно на основе того, как другиеклассы см. этого класса, не обращая внимания на частную реализацию этого класса.

Например, при тестировании класса, который содержит набор вещей, тесты должны не основываться на том факте, что коллекция хранится в частном порядке в виде массива (или чего-либо еще) и что «если я добавлю элемент в коллекцию, то поле частного массива должно содержать добавленный элемент».Тесты, написанные таким образом, сломаются, если внутренняя реализация будет изменена, даже если класс может работать правильно.

Вместо этого, тесты должны основываться на том, «если я добавлю элемент в коллекцию, то (например)Я должен иметь возможность вернуть его, перечислив коллекцию ", поскольку перечисление, вероятно, будет в публичном API этого класса.Тесты, написанные следующим образом, все равно должны работать, если внутренняя реализация изменена, без изменения поведения класса.

Обратите внимание, что область действия важна при рассмотрении части фразы «публичный API».фраза.Рассматривая библиотеку, вы можете подумать, что это означает, что вы должны тестировать только те классы, которые представлены публично.Принимая во внимание, что с точки зрения рассмотрения каждого отдельного класса (некоторые из которых могут быть недоступны извне библиотеки), каждый из них предоставляет публичный API для того, как другие классы должны взаимодействовать с ними.Это вторая область, к которой относится модульное тестирование.Это не значит, что первая область плоха, просто тестирование всей библиотеки - это не тестирование unit , это интеграция тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...