Size: a a a

Software Design/Architecture/Zen

2021 January 09

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
it('should returns true on start', () => { имхо сомнительное описание, почему например не 'should be working after start'?
Ну.. каюсь, я не гуру тестирования булевых свойств)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
it('should returns false on start if boiler is empty' => 'shouldn't start working if boiler is empty'
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Сергей Клевакин
Я люблю SOLID... Вроде понимаю, как и зачем его использовать. Но вот на досуге решал задачку и сам для себя отмечал принципы, которыми я реально пользуюсь при разработке/проектировании.

Получился такой перечень:

-Высокий уровень абстракции решения задачи понятный даже не программисту (вербозность)

-Тестируемость

-Расширяемость через создание новых файлов (что-то типа OCP)

-Локализация изменений (каждой причине для изменения свой файл) (что-то типа SRP)

SOLID на третьем месте... И до выполнения первых двух принципов к нему не стоит обращаться.

https://github.com/justerest/coffee-machine
Ну если ты оригинальные принципы почитаешь)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Dmitriy Tkachenko
it('should returns false on start if boiler is empty' => 'shouldn't start working if boiler is empty'
Тест кейс должен объяснять почему там тру или фолс. Ты ж бизнесу так говорить не будешь)
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
it('should returns false on start if boiler is empty' => 'shouldn't start working if boiler is empty'
Да, так будет лучше... Но я через TDD кодил, поэтому изначально заставлял работать именно свойство is working.
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Sergey Protko
Тест кейс должен объяснять почему там тру или фолс. Ты ж бизнесу так говорить не будешь)
ты ж тестируешь поведение) а не возвращаемые значения
источник

SP

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

SP

Sergey Protko in Software Design/Architecture/Zen
А я не так прочитал
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Ты предложил как исправить
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
ты ж тестируешь поведение) а не возвращаемые значения
Ну да) но проверяю проведение через возвращаемое значение свойством)

Но я согласен, что лучше описание этих тестов поправить
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
isWorking() это геттер, по которому ты получаешь состояние кофемашины, чтобы по возвращаемому значению понять, то ли кофемашина делает. По описанию это тесты не машины, а именно этого геттера)
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
isWorking() это геттер, по которому ты получаешь состояние кофемашины, чтобы по возвращаемому значению понять, то ли кофемашина делает. По описанию это тесты не машины, а именно этого геттера)
👍
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
isWorking() это геттер, по которому ты получаешь состояние кофемашины, чтобы по возвращаемому значению понять, то ли кофемашина делает. По описанию это тесты не машины, а именно этого геттера)
Подскажи, а как быть с тестами, которые я хочу продублировать и для машины целиком и для отдельной части?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Я не спец, сам только познаю)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Но для отдельных частей вроде как делаешь полное покрытие всех вариантов, а для всей машины как приемочного подно либо самык важные кейсы покрыть, либо все (если их немного). Если это не природные а интеграционные, то ткстить только взаимодействие частей, а не все возможные варианты
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Можно избегать комбинаторного взрыва, тщательно отбирая тесткейсы, а остальное доверить модульным. А можно поддаться ему и затеатировать все и сделать n! Работу плюс получить хрупкие тесты
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Можно избегать комбинаторного взрыва, тщательно отбирая тесткейсы, а остальное доверить модульным. А можно поддаться ему и затеатировать все и сделать n! Работу плюс получить хрупкие тесты
Ну у меня была такая ситуация. Я сперва наTDDшил все в один класс. Потом подумал... И решил, что надо разбить. Продублировал тесты из класса кофемашины в отдельные части. И так и не определился, удалять дубликаты из общих тестов) или оставить)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
если ты сделаешь изменения в модуле, тебе придется исправлять в лучшем случае 2 теста, а в среднем 1 + N * K, где N кол-во модулей которые взаимодействуют с тестируемым модулем, а K - кол-во возможных состояний тестируемого модуля, задетых изменением
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
стоит оно того? ну не знаю)
источник

СК

Сергей Клевакин... in Software Design/Architecture/Zen
Ну.. да) значит... Оставил бы те тесты, в которые проверяют возможно конфликтное проведение
источник