"для данного приложения графического интерфейса, такого как текстовый процессор, является ли общедоступный API самим графическим интерфейсом?" .Нет, проблема, с которой вы столкнулись, заключается в том, что вы смотрите на «общую картину», не принимая во внимание область применения модульного тестирования.
Тег StackOverflow определяет его как: " Модульное тестирование - это метод, с помощью которого отдельные блоки исходного кода тестируются, чтобы определить, пригодны ли они для использования ".С этой точки зрения выражение имеет смысл, потому что вы тестируете каждый отдельный класс.Если существует хорошее разделение интересов, большинство этих классов даже не осознают, что они являются частью «текстового процессора».
Идея состоит в том, что вы должны тестировать этот класс исключительно на основе того, как другиеклассы см. этого класса, не обращая внимания на частную реализацию этого класса.
Например, при тестировании класса, который содержит набор вещей, тесты должны не основываться на том факте, что коллекция хранится в частном порядке в виде массива (или чего-либо еще) и что «если я добавлю элемент в коллекцию, то поле частного массива должно содержать добавленный элемент».Тесты, написанные таким образом, сломаются, если внутренняя реализация будет изменена, даже если класс может работать правильно.
Вместо этого, тесты должны основываться на том, «если я добавлю элемент в коллекцию, то (например)Я должен иметь возможность вернуть его, перечислив коллекцию ", поскольку перечисление, вероятно, будет в публичном API этого класса.Тесты, написанные следующим образом, все равно должны работать, если внутренняя реализация изменена, без изменения поведения класса.
Обратите внимание, что область действия важна при рассмотрении части фразы «публичный API».фраза.Рассматривая библиотеку, вы можете подумать, что это означает, что вы должны тестировать только те классы, которые представлены публично.Принимая во внимание, что с точки зрения рассмотрения каждого отдельного класса (некоторые из которых могут быть недоступны извне библиотеки), каждый из них предоставляет публичный API для того, как другие классы должны взаимодействовать с ними.Это вторая область, к которой относится модульное тестирование.Это не значит, что первая область плоха, просто тестирование всей библиотеки - это не тестирование unit , это интеграция тестирование.