Sergey
ну ок
Sergey
чистый код - перечитывать постоянно
Sergey
чистый код) мне тоже больше нравится
Пантелеев
Я правда не джавист, но думаю в этом контексте неважно
Sergey
лучше знать наизусть)
Пантелеев
Пантелеев
Скучно
Sergey
ну и еще.... это не совсем по програмухе
Sergey
рекомендую прошариться в теории ограничений
Пантелеев
Sergey
The Goal - Eliyahu M. Goldratt
Sergey
вот эта книга
Пантелеев
А блин нету, видимо стер ее
Rodion
Rodion
воды много?
Sergey
либо вода, либо капитанщина
🐴
@fes0r как тестировать такие методы? https://github.com/f3ath/git-changelog/pull/1/files#r93981076
Sergey
Sergey
я тебе привел способ убрать зависимость от git gateway
Sergey
там где тебе надо просто уже готовые данные пробросить
Sergey
у тебя необходимость взаимодействовать с внешним миром уменьшится
Sergey
остануются тупо данные и логика
🐴
Блин, не отправился коммит
🐴
Я имею в виду Git::getRevisions
Sergey
его только интеграционными тестами
Sergey
git::getRevisions у тебя взаимодействует с внешним миром и именно это взаимодействие тебе надо проверить что бы убедиться, что реализация соблюдает контракт, наложенный интерфейсом
🐴
Sergey
Но ведь они scam?
ну в том то и дело, у тебя их должно быть немного и они должны именно проверять интеграцию с внешними компонентами/внешним миром
Sergey
потому я и ввел класс Commit что бы убрать необходимость иметь зависимость от гейтвея там где не надо
🐴
Получается тест будет проверять еще и сам класс Commit, причем весьма опосредованно
Sergey
что бы можно было руками в тестах сформировать массив коммитов и передать тупо как аргументы
Sergey
Sergey
ты хочешь проверить GitGateway
🐴
Нужно будет подергать все методы Commit, чтобы убедиться, что фабрика отрабатывает правильно
🐴
Sergey
Sergey
давай составим список консернов
Sergey
1. Нам надо убедиться что мы создаем только валидные коммиты. То есть все инварианты объекта Commit всегда соблюдаются
🐴
Так
Sergey
соблюдение инвариантов объекта дело самого объекта. Нам нужно реализовать класс Commit таким образом, что бы он не допускал нарушения инвариантов. А это мы будем проверять в юнит тестах на Commit
🐴
Так
Sergey
потому в контексте тестирования GitGateway мы этот пункт вычеркиваем из списка.
🐴
Хорошо
Sergey
далее... мы должны убедиться что команды, которые формирует наша реализация гейтвея возвращает нужные нам коммиты
🐴
Надо проверить логику парсинга ответов гита
Sergey
ну тип того да
Sergey
для начала определись "что надо собственно проверить".
Sergey
какие сценарии
Sergey
какие у этих сценариве прекондишены (пустой репозиторий, 10 коммитов, коммиты принадлежат нескольким тегам... словом то что тебе важно)
Sergey
тебе надо составить своего рода чеклист (критерии приемки), который отвечает на вопрос "это работает корректно"
Sergey
тип "если нет указанных тегов, мы должны кинуть исключение"
Sergey
подготовить фикстуры (какой-то тестовый набор данных, репозиторий с несколькими коммитами и разными вариантами тегов)
🐴
Sergey
Sergey
ну то есть... что бы ты не сделла с объектом, инварианты не должны нарушаться
Sergey
пример
Sergey
class User
{
private $email;
private $password;
public function __construct(string $email, string $password);
}
Sergey
тут простой инвариант - поля email и password не могут быть пустыми
🐴
Это будет интеграционный тест тогда. Если тест фейлит, это не дает тебе точной информации о том, что именно сломалось.
Sergey
и обязательны
Sergey
Sergey
Sergey
какая ошибка?
🐴
Sergey
так
Sergey
у тебя есть класс Commit и тест CommitTest
Sergey
и этот тест гарантирует тебе на 100% что "кривой коммит" сделать нельзя
Sergey
это будет всегда валидный объект
Sergey
ну мол если ты попытаешься собрать коммит из кривых или неполных данных, ты получишь конкретное исключение
Sergey
брошенное из конкретного места
Sergey
а стало быть в контексте класса GitGateway тебе не надо вообще об этом париться
Sergey
если у тебя при парсинге инфы будет говно, говно попадет в Commit и тест упадет
Sergey
тест для GitGateway не изолирован
🐴
Объект может быть валидным, но содержать некорректные данные, например, только первую строку из многострочного коммит мессаджа
Sergey
🐴
Или вот, пропал последний символ хеша коммита - кто виноват? Какой класс из двух?
Sergey
это не тестирование самого Commit
🐴
О том и речь