Тесты, которые вы написали, - хорошее начало!Испытывая это, тренируясь и отрабатывая то, что работает, а что нет, то, как любой, кто является «гуру», становится одним из первых.(Я еще не встречал «гуру»; просто люди с годами практики).
Есть несколько вопросов, поэтому я собираюсь ответить на них по очереди.
Интеграционное тестирование действительно медленное, да.
Обычно я делаю это для всего приложения, от графического интерфейса пользователя или веб-страницы, для определенных ключевых сценариев во всей системе, поскольку выполнение одних и тех же тестов вручнуюкропотливый.По мере роста приложения растет и количество регрессионного тестирования, которое должны будут выполнять тестеры.Вы можете помочь им, написав эти автоматизированные тесты.
Разработчики вряд ли когда-либо увидят преимущества автоматизированных тестов, потому что тестеры действительно нуждаются в них и используют их.Подумайте об этом с их точки зрения, и вы, возможно, увидите больше пользы.
Фактическое получение сценариев в первую очередь может быть полезным, поскольку оно помогает разработчикам, тестировщикам и аналитикам находить и устранять различия в их понимании системы.
Тестирование частных методов должно быть ненужным.Однако ...
Если ваш метод сложный, вы всегда можете разделить его на другой класс и заставить ваш класс сотрудничать с ним.Если ваши личные методы являются важными, вам, вероятно, следует сделать это.
Кроме того, не тестируйте методы.Опишите каждый аспект поведения вашего класса, покажите, почему оно ценно, и приведите несколько примеров его использования.Поведение может включать в себя более одного метода.Например, list.isEmpty
требует, чтобы мы тоже работали с list.add
;именно взаимодействие между ними важно для вещей, использующих list
.
Именно поэтому мы не тестируем частные методы - потому что они не приносят пользы классу, использующему их самостоятельно.
Названия ваших тестов могут помочь отразить это.Подумайте: «Моя модель представления должна ...», а затем подумайте, как она обеспечивает ценное поведение, которое она делает.Например, я бы сформулировал ваш первый тест как «Моя модель представления должна уведомлять слушателей, что описание изменилось», поэтому ShouldNotifyListenersThatTheDescriptionChanged
.
Вместо , устанавливающего ожидание , считайте, что вашУ класса есть несколько сотрудничающих классов.
Некоторые из них предоставляют классу информацию - контексты, которые меняют его поведение и приводят к различным результатам.Некоторые из них делают работу для класса.Первые - это «заглушки», а вторые - «издевательства» (терминология здесь смешана во всем бизнесе).
Вместо того, чтобы устанавливать ожидания, вы предоставляете пример, который показывает, как класс ведет себя в этом контексте.
Вместо того, чтобы проверять результат, вы показываете, что класс надлежащим образом делегирует свои обязанности.
Насмешки - всего лишь полезный способ сделать это.
* Типичные тесты, которые я пишу , - это те, которые помогают мне описать поведение кода, убедиться, что его обязанности соответствуют требованиям, и показать, почему код полезен.Это большая часть кода, но я не буду писать примеры для тривиальных классов - например, пользовательских исключений, объектов, которые являются просто данными или свойствами и т. Д.
Вы можете показать поведение хранимых, написав примеры использования в различных контекстах, которые показывают различные аспекты поведения.Возможно, вам придется настроить некоторые данные, чтобы это работало.Большинство команд, с которыми я работаю, избегают хранимых процедур только из-за сложности их тестирования или просто полагаются на сценарии полного стека для обеспечения покрытия.
Надеюсь, это поможет, и удачи!