Size: a a a

Software Design/Architecture/Zen

2020 December 28

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
А как тытпротестируешь поведение? Например установку каких то параметров? Если это единственная реакция
если у тебя весь объект - это установка параметров - там нечего тестить юнитами. Этот кейс покрывают какие-то более высокоуровневые тесты
источник

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Этоточно не про тестирование поведения) а реализации
Ну где-то можно и стейт чекнуть
this.assertThat(obj, new ObjectState(['a' => 'val1', 'b' => 2]))
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
knopkod4v
если у тебя весь объект - это установка параметров - там нечего тестить юнитами. Этот кейс покрывают какие-то более высокоуровневые тесты
у тебя есть 2 команды объекту - А и В, А только запоминает какие-то параметры и испускает ивент С. Но команда В зависит от установки параметров в А. То есть полное поведение, это конструкция A => B => event D. Ты его будешь тестить в одном тесткейсе?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
А если например в обработчике А будет какое-то разветвление, ты будешь все это раветвление покрывать тесткейсами всей цепочки A => B => event D?
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
у тебя есть 2 команды объекту - А и В, А только запоминает какие-то параметры и испускает ивент С. Но команда В зависит от установки параметров в А. То есть полное поведение, это конструкция A => B => event D. Ты его будешь тестить в одном тесткейсе?
я так понял, что поведение метода B зависит от метода A, тогда
тест 1:
call A
assert C

тест 2:
call A
call B
assert D
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
А если например в обработчике А будет какое-то разветвление, ты будешь все это раветвление покрывать тесткейсами всей цепочки A => B => event D?
зависит от того, должно ли как-то влиять это разветвление на поведение объекта при вызове B
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
knopkod4v
зависит от того, должно ли как-то влиять это разветвление на поведение объекта при вызове B
Да. Это поведение размазано по времени. С одной стороны логично, что ты догоняешь вариациями ивента С обьект до нужных состояний и тестишь метод В, а с другой ты тестишь обработчик С в тесте метода В
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
Да. Это поведение размазано по времени. С одной стороны логично, что ты догоняешь вариациями ивента С обьект до нужных состояний и тестишь метод В, а с другой ты тестишь обработчик С в тесте метода В
не понял про "догоняешь вариациями ивента С объект до нужных состояний". Ивент С в тесте 2 вообще не при чём. И нет никакого обработчика ивента С.
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
knopkod4v
не понял про "догоняешь вариациями ивента С объект до нужных состояний". Ивент С в тесте 2 вообще не при чём. И нет никакого обработчика ивента С.
обработчик ивента С необязательно какой-то существующий штук. В методе А какая-то разветвленная логика, которая приводит к одному из событий испускаемого во вне, например Ca, Cb и Cd. И т.к. это 3 разные ветки которые приводят к разному результату, ты хочешь или не хочешь, осознанно или не очень, обрабатываешь эти события в методе А
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
обработчик ивента С необязательно какой-то существующий штук. В методе А какая-то разветвленная логика, которая приводит к одному из событий испускаемого во вне, например Ca, Cb и Cd. И т.к. это 3 разные ветки которые приводят к разному результату, ты хочешь или не хочешь, осознанно или не очень, обрабатываешь эти события в методе А
а по моему не обрабатываешь. Ивент - это уже результат. И какие там ветвления не очень интересно - интересен ивент. В это и суть изоляции - не знать реализацию
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
ивент как часть распределенной системы - это результат. Ивент как событие в системе ты обрабатываешь всегда. Например если пользователь залогинился, это уже само по себе событие и не важно, есть ли класс UserLoggedIn extends Event в системе или нет.
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
ивент как часть распределенной системы - это результат. Ивент как событие в системе ты обрабатываешь всегда. Например если пользователь залогинился, это уже само по себе событие и не важно, есть ли класс UserLoggedIn extends Event в системе или нет.
не понял и не понял как это связано с тестами 🤔
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Что такое поведение?
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
Что такое поведение?
это правила поведения. Если был вызван метод А с такими-то параметрами - метод Б с такими-то параметрами будет возвращать такой-то результат
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
можно без рекурсии поведение - это правила поведения?😂
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
поведение - это реакция на происходящее
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
можно без рекурсии поведение - это правила поведения?😂
я просто уточнил, что я понимаю под поведением. Это именно правила поведения
источник

k

knopkod4v in Software Design/Architecture/Zen
Dmitriy Tkachenko
поведение - это реакция на происходящее
правила реакции тогда 🤔
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
происходящее - это событие (формализованное или нет). Значит поведение - это реакция на события, протекающая по определенным правилам
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
вот тебе и связь с тестами, ты же сам говоришь тестировать поведение)
источник