Я видел свою долю насмешек и заглушек, и я видел, как проходили огромные тестовые наборы, хотя приложение было сломано до предела, потому что половина кода даже больше не существовала.
I 'Мы пришли к выводу, что заглушки и насмешки следует использовать с особой осторожностью.Это и тот факт, что это должно быть введено как можно позже.
Это один из случаев, когда слишком рано издеваться. Вы издеваетесь только потому, что вы этого не делаетеиметь класс Hand
пока.
Как свидетельство, сам тест нуждается в улучшении.Посмотрите внимательнее на эти строки:
hand.should_receive(:count).and_return(13)
subject.hand=hand
subject.hand.count.should==13
subject.hand.count.should=12
Конечно, subject.hand.count.should==13
проходит, вы просто заглушили это значение.И, конечно же, subject.hand.count.should=12
проходит, потому что вы не позвонили ==
.Если вы изменили это на реальное ожидание, вы бы удивились, почему это не удается.Сбой из-за того, что вы поставили Hand#count
на всегда , верните 13.
То, что вы на самом деле здесь делаете, это насмешливая часть тестируемого API.Не делай этого.Вместо этого начните с маленьких шагов .Это может означать:
Вы начинаете изнутри и прокладываете себе путь.Так что начните с самого внутреннего класса, Hand
в этом случае.Как только вы доберетесь до Player
, все части будут отлично совмещаться без насмешек.
Вы начинаете с Player
, пока вам абсолютно не понадобится другой класс (делайте это, если вам нравится аргумент «значимого API»).Это означает: дождитесь NameError
на Hand
.Затем реализуйте столько классов Hand
, сколько необходимо.Затем вернитесь к Player
Кроме того, просмотр вашего кода поднимает вопрос: просто из любопытства, почему вы хотите разделить игрока и ее руку в первую очередь?