Разработка через тестирование и KISS - PullRequest
0 голосов
/ 09 июля 2019

Например, я хочу создать объект Job. Работа имеет статус, и мне нужно пометить Job как выполнено .

Я написал markDone() метод и хочу его протестировать. Поэтому для утверждения мне нужен еще один метод - isDone(). Но на данный момент я не использую метод isDone() в моем коде.

Можно ли писать такие бесполезные методы, чтобы угодить TDD?

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Можно ли писать такие бесполезные методы, чтобы угодить TDD?

Да, но, возможно, нет.

Часть «да»: вам разрешено оформлять дизайн таким образом, чтобы тестирование было проще, включая создание методов, специально предназначенных для наблюдаемости. Такие вещи часто оказываются полезными позже, когда вы пытаетесь создать представления для понимания процессов, работающих в рабочей среде.

Возможно не часть: для чего нужен статус Job ::? Какое наблюдаемое поведение (я) в системе изменяется, когда установлен этот статус? Какие ошибки были бы поданы, если бы Job :: markDone был неактивным? Это то, что вы действительно хотите испытать.

Например, может случиться так, что вам нужно будет описать работу как документ JSON, а изменение статуса работы изменит значение, отображаемое в JSON. Большой! Проверьте это.

job.markDone()
json = job.asJson()
assert "DONE".equals(json.getText("status))

В доменном слое / бизнес-логике объекты интересны тем, как они используют свои скрытые структуры данных для ответа на запросы. Команды интересны не потому, что они изменяют структуру данных, а потому, что измененная структура данных приводит к разным результатам запроса.

0 голосов
/ 09 июля 2019

Может ли isDone () просто находиться в тестовом проекте, а не в рабочем коде? Таким образом, у вас не будет бесполезного производственного кода только для тестирования.

0 голосов
/ 09 июля 2019

Если метод бесполезен вне тестирования, я бы не стал его писать, поскольку, вероятно, есть другой способ проверить, выполнена ли работа. Является ли статус работы общедоступным, или у вас есть метод, который возвращает статус работы? Если это так, я бы использовал это для проверки правильности работы markDone(). Если нет, вы можете использовать отражение , чтобы проверить значение свойства частного или защищенного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...