Итак, какие вопросы я должен задать, спрашивая о проекте и о себе, чтобы помочь выбрать наилучшую систему для насмешек для использования в данном случае?
Вопросы, которые вы должны задать о проекте: был ли проект разработан с использованием принципов SOLID или нет? Это проект, который имеет слабую связь и высокую сплоченность? Были ли использованы хорошие принципы ОО при создании проекта? Используется ли контейнер для инъекций зависимости? Была ли система закодирована в методе проектирования по контракту (с тщательным использованием интерфейсов)?
Если вы ответите «да» на эти вопросы, то вы можете использовать фальшивую платформу, такую как RhinoMocks, которую некоторые называют «фальшивой». RhinoMocks и некоторые другие фреймворки имеют очень сильные мнения о том, как должна быть спроектирована система для того, чтобы объекты были смоделированы. Фреймворк, такой как RhinoMocks, ожидает, что ваш проект будет спроектирован определенным образом. С RhinoMocks, конечно, гораздо проще создавать mocking, если вы правильно построили свой код (без запечатанных классов, без статики, интенсивного использования интерфейсов, виртуальных методов класса и т. Д.)
Если вы ответите «нет» на эти вопросы, или если вы работаете в устаревшей системе с большим количеством сильно связанных классов, тогда ваш единственный выбор будет TypeMock, который может высмеивать практически все, что угодно.
Было бы также полезно узнать, почему вы выбираете структуру насмешки, которую вы используете в настоящее время, и если вы все еще довольны этим выбором.
Я выбрал RhinoMocks, потому что в то время (более 3 лет назад) это был явно самый зрелый фреймворк с большинством функций. Я остался с этим, потому что он развивался вдали, что делает мою жизнь намного легче (появление контейнера AutoMocking стало гигантским шагом к эффективности).
Что мне нравится в RhinoMocks, кроме набора функций и простоты использования, так это то, что он направляет меня к лучшему дизайну в моем коде. Я не идеальный программист, и я собираюсь делать ошибки в дизайне. Но такие инструменты, как RhinoMocks и NHibernate, помогают мне улучшить дизайн, потому что, когда я делаю ошибки и создаю плохой дизайн, с этими инструментами становится больно работать. Например, с NHibernate больно работать, если у вас плохой дизайн базы данных. С RhinoMocks очень трудно работать, если у вас плохой дизайн класса, вы не используете интерфейсы, не используете IoC ... и т. Д.
Мне нравится RhinoMocks, потому что это в конечном итоге помогает мне стать лучшим разработчиком, и не только потому, что я тестирую свой код, но и потому, что я формирую свой код - проектирую его - лучшим образом.