Существует несколько видов тестов, но наиболее важными из них являются модульное тестирование, тестирование компонентов, функциональное тестирование и сквозное тестирование.
Unit tests
проверяет, работают ли ваши классы так, как задумано. (JUnit). Эти тесты являются основой вашей тестовой среды, так как они показывают, работают ли ваши методы. Ваша цель - 100% охват, так как это самая важная часть ваших тестов.
Component tests
проверяет, как несколько классов работают вместе в вашем коде. Компонент может содержать много кода, но в основном это больше, чем модульное тестирование, и меньше, чем функциональное тестирование. Покрытие цели составляет около 75%.
Function tests
проверяет фактические функции, которые вы реализуете. Например, если вы хотите кнопку, которая сохраняет некоторые входные данные в базе данных, это функциональность программы. Это то, что вы тестируете. Здесь охват цели составляет около 50%.
End-to-end tests
проверяет все ваше приложение. Они могут быть довольно надежными, и вы, вероятно, не можете и не хотите тестировать все, этот тест здесь, чтобы проверить, работает ли вся система. Покрытие цели составляет около 25%.
Это тоже порядок важности.
Хотя в них нет такой вещи, как "лучше". Любой тест, который вы можете запустить, чтобы проверить, правильно ли работает ваш код, одинаково хорош.
Вы, вероятно, хотите, чтобы большая часть тестов была автоматизирована: чтобы вы могли тестировать, когда у вас перерыв на кофе, или ваши серверы могут тестировать все, пока вы не на работе, а затем проверять результаты утром.
Тестирование GUI считается самой сложной частью тестирования, и есть несколько инструментов, которые помогут вам в этом, например, Selenium для тестирования браузера-GUI.
Из-за этого несколько архитектурных шаблонов, таких как Model-View-Presenter, пытаются отделить часть приложения с графическим интерфейсом и работают с максимально простым интерфейсом, чтобы избежать ошибок. Если вы сможете успешно отделить вашу графику, вы сможете макетировать графическую часть приложения и просто исключить ее из большей части процесса тестирования.
Для справки я предлагаю «Эффективное тестирование программного обеспечения» от Эльфриды Дастин, но я не знаком с книгами на эту тему; могут быть и лучшие.