Функциональное программирование и фиктивные объекты - PullRequest
12 голосов
/ 25 августа 2010

Я недавно смотрел веб-трансляцию на Clojure. В нем ведущий прокомментировал в контексте обсуждения FP-природы Clojure что-то вроде (я надеюсь, что я не искажаю его) «Поддельные объекты насмехаются над вами».

Я также слышал похожий комментарий некоторое время назад, когда смотрел веб-трансляцию, когда начала появляться Microsoft Reactive Framework. Это было что-то вроде «Поддельные объекты для тех, кто не знает математику»)

Теперь я знаю, что оба комментария - это шутки / насмешки и т. Д. И т. Д. (И, вероятно, они плохо перефразированы), но в основе их лежит, очевидно, нечто концептуальное, чего я не понимаю, так как на самом деле я не сделал переход к Парадигма FP.

Итак, я был бы признателен, если бы кто-нибудь мог объяснить, действительно ли ФП делает насмешку избыточной, и если да, то как.

Ответы [ 2 ]

9 голосов
/ 30 января 2011

Я думаю, что важно подумать о том, чтобы идея использования тестов помогла вам структурировать ваш код. На самом деле издевательства - это откладывание решений, которые вы не хотите принимать сейчас (и широко недопонятая техника). Вместо состояния объекта рассмотрим частичные функции. Вы можете написать функцию, которая переносит часть своего поведения в частично переданную функцию. В модульном тесте это может быть фиктивной реализацией, которая позволяет вам просто сосредоточиться на коде в руке. Позже вы создадите свой новый код с реальной реализацией для построения системы.

На самом деле, когда мы разрабатывали идею Mocks, я всегда думал о Mocks таким образом. Часть объекта была случайной.

9 голосов
/ 25 августа 2010

В чистой FP у вас есть ссылочно прозрачные функции, которые вычисляют один и тот же вывод каждый раз, когда вы вызываете их с одним и тем же вводом.Поэтому все необходимое вам состояние должно быть явно передано как параметры и как результаты функции, нет объектов с состоянием, которые каким-то образом «спрятаны» за вызываемой вами функцией.Это то, что обычно делают ваши фиктивные объекты: имитируют некоторое внешнее, скрытое состояние или поведение, на которое опирается ваш тестируемый объект.

Другими словами: OO: Ваши объекты сочетают в себе связанное состояние и поведение.Чистая FP: Состояние - это то, что вы передаете между функциями, которые сами по себе не имеют состояния и полагаются только на другие функции без состояния.

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