RSpec DSL нарушает закон Деметры? - PullRequest
1 голос
/ 02 марта 2012

Это может быть наивным вопросом, но нарушает ли тестирование DSL RSpec закон Деметры?

Вот пример RSpec DSL из http://rspec.info:

bowling.score.should eq(0)

С точки зрения Деметры, это кажется мне неотличимым от этого примера:

user.department.try(:name)

что согласно Авди Гримму является нарушением закона Деметры.

Источник: http://devblog.avdi.org/2011/07/05/demeter-its-not-just-a-good-idea-its-the-law/

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Деметра - это руководство по снижению риска, основанное на идее, что менее часть системы зависит от структуры других частей, тем меньше вероятность эта часть будет затронута изменениями в указанной структуре.

Можно с уверенностью утверждать, что game.score.should eq(0) - это Деметра. нарушение, но метод should является частью структуры rspec, которая является контекст вокруг утверждения game.score.should eq(0) и вряд ли изменить таким образом, что это приведет к изменениям в этом утверждении.

Может быть, это нарушает Деметру, может, нет, но риск, к которому стремится Деметра, не действительно присутствует.

1 голос
/ 02 марта 2012

Это, очевидно, субъективно, но я считаю, что не .

Вызов should является частью языка RSpec, который просто случается сбыть построенным на Руби.Нет причин, по которым это не может быть:

should_be_equal(bowling.score, 0)

(или аналогичный), но это не язык RSpec.Кроме того, метод should существует только для этого объекта в спецификациях, для спецификаций.

Чтобы попытаться (возможно, несколько грубо) лучше проиллюстрировать мой аргумент о принадлежности к языку:

bowling.score + 10

на самом деле вызывает + метод на score, но считаете ли вы это нарушением закона деметры?+ рассматривается как оператор, а не метод, очень похоже на should выше.

...