RhinoMocks и Heisenbugs - PullRequest
       65

RhinoMocks и Heisenbugs

2 голосов
/ 11 марта 2010

В последнее время я использую RhinoMocks, но продолжаю сталкиваться с проблемой. Если я вхожу в отладчик и перебираю код, когда макет находится в режиме записи, я получаю исключение в виде:

System.InvalidOperationException: Previous method 'SuchAndSuch.ToString();'  
requires a return value or an exception to throw.

Но если я выполню тот же код без отладки, он успешно выполнится и создаст макет.

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

Другие люди сталкивались с этой проблемой? Есть ли простое лекарство? Есть ли другие проблемы, такие как moq или TypeMock, эта проблема?

Спасибо

~ Джастин

Ответы [ 2 ]

3 голосов
/ 11 марта 2010

Я помню, что у меня была похожая проблема с NMock много лет назад. По сути, эта проблема возникает именно потому, что отладчик вызывает и отображает свойства, используя метод ToString (если вы не используете DebuggerDisplayAttribute или аналогичный).

Это может быть особенно проблематично, если вы используете строгие насмешки , потому что они позволяют вам вызывать элемент только указанное количество раз, и отладчик мешает этому. Использование oose mocks решает эту (и многие другие) проблемы.

Вы также можете отойти от механизма записи / воспроизведения в Rhino Mocks и начать использовать более новый и гораздо лучший лямбда-синтаксис .

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

Еще одно средство - просто скрыть Автомобили и Локальные окна отладчика.

0 голосов
/ 12 марта 2010

Как предложил Марк, эта проблема должна исчезнуть, если вы перестанете использовать подход «запись-воспроизведение-проверка» и начнете использовать заглушки с рекомендуемым подходом ААА (упорядочить, действовать, утвердить).

Я попытался объяснить разницу и как это сделать с Rhino Mocks в этом блоге .

...