Чтобы было ясно, я создал FakeItEasy, так что я, безусловно, не сказать, является ли одна структура лучше, чем другие, что я могу сделать, это указать на некоторые различия и мотивации почему Я создал FakeItEasy. Функционально нет существенных различий между Moq и FakeItEasy.
FakeItEasy не имеет «Подтверждаемых» или «Ожиданий», однако у него есть утверждения, однако они всегда четко указаны в самом конце теста, я считаю, что это упрощает чтение и понимание тестов. Это также помогает новичкам избегать множественных утверждений (где они будут устанавливать ожидания во многих вызовах или макетных объектах).
Раньше я использовал Rhino Mocks, и мне это очень понравилось, особенно после того, как был введен синтаксис AAA. Мне все же нравился свободный API Moq. То, что мне не нравилось с Moq, было «макетным объектом», где вы должны использовать mock.Object везде, мне нравится подход Rhino с «естественными» маками лучше. Каждый экземпляр выглядит и выглядит как обычный экземпляр поддельного типа. Я хотел лучшего из обоих миров, а также хотел посмотреть, что я могу сделать с синтаксисом, когда у меня были абсолютно свободные руки. Лично я (очевидно) думаю, что я создал что-то хорошее, что хорошо сочетается с лучшими из мира, но это довольно легко, когда вы стоите на плечах гигантов.
Как уже упоминалось, одно из основных отличий заключается в терминологии, FakeItEasy была впервые создана для того, чтобы ввести TDD и насмехаться перед новичками и беспокоиться о различиях между mocks и заглушками спереди (так, как вы должны были бы в Rhino), по моему мнению, не очень полезно.
Я вложил много внимания в сообщения об исключениях, должно быть очень легко сказать, что когда-то не так в тесте, просто глядя на сообщение об исключении.
FakeItEasy имеет некоторые функции расширяемости, которые другие структуры не имеют, но они еще не очень хорошо документированы.
FakeItEasy (надеюсь) немного сильнее в насмешливых классах, у которых есть аргументы конструктора, так как у него есть механизм для разрешения используемых фиктивных значений. Вы даже можете указать свои собственные определения фиктивных значений, внедряя класс DummyDefinition (Of T) в свой тестовый проект, это автоматически будет подхвачено FakeItEasy.
Синтаксис - очевидная разница, которая лучше всего во многом зависит от вкуса.
Я уверен, что есть много других различий, о которых я забыл сейчас (и, честно говоря, я никогда не использовал Moq в производстве, поэтому мои знания об этом ограничены), я думаю, что это самые важные отличия хоть.
Для совершенно иного рода насмехаясь и окурки посмотреть на платформе Microsoft родинок (HTTP: // research.microsoft.com/en-us/projects/moles/). Мольс позволяет издеваться над статическими, запечатанными и сторонними классами. – softveda