Подтвердить что ты не робот

Что следует учитывать при выборе фальшивой структуры для .Net

Есть много насмешливых фреймворков для .Net. Нет явного победителя, который все равно заменит остальных. Ведущие издевательские рамки также имеют много разных стилей использования.

Время, затрачиваемое на то, чтобы выучить все издевательские рамки достаточно хорошо, чтобы решить, что использовать, необоснованно. Я не верю, что мы дошли до того, что можем говорить о лучших насмешливых рамках. Итак, какие вопросы я должен задавать, как о проекте, так и о себе, чтобы помочь выбрать наилучшую издевательскую структуру для использования в данном случае?

Было бы также полезно узнать, почему вы выбрали насмешливую структуру, которую используете в настоящее время, и если вы все еще довольны этим выбором.

Есть ли полезный словарь для использования при сравнении стилей насмешливых фреймворков?

( Примечание: Я ограничил этот вопрос .Net, поскольку Java не имеет атрибутов или лямбда-выражения, поэтому я надеюсь, что насмешливые фреймворки могут быть лучше для .Net, затем Java)

Резюме:

  • Если вам нужно издеваться над статическим методом или ни один виртуальный метод не является единственным разумный вариант TypeMock, однако он не является бесплатным и не ведет вас к хорошему дизайну.
  • Rhino Mocks - очень хороший вариант, если вы делают TDD, например, объекты, которые вы желают издеваться над интерфейсами реализации. В настоящее время это, кажется, "лидер рынка".
  • Moq (введение) следует считаться, если вы использование .NET 3.5 Moq может быть на Rhino Mocks для новых проектов

Что я пропустил из этого резюме?

Итак, что заставляет выбирать между Rhino Mocks и Moq, если вы используете .NET 3.5?


см. также:

"Что следует учитывать при выборе рамки для инъекций зависимостей для .NET?? может также представлять интерес, поскольку он задает" другую сторону" вопроса.

4b9b3361

Ответ 1

Итак, какие вопросы я должен задать, спросив о проекте и о себе, чтобы помочь выбрать наилучшую издевательскую структуру для использования в данном случае?

Вопросы, которые вы должны спросить о проекте: разрабатывается ли проект с помощью принципов SOLID или нет? Является ли это проектом, который имеет свободную связь и высокую степень сцепления? При разработке проекта были использованы хорошие принципы ОО? Используется ли контейнер для инъекций зависимостей? Была ли система закодирована в методе "Дизайн по контракту" (с использованием интерфейсов)?

Если вы ответите "да" на эти вопросы, тогда вы можете использовать насмешливую инфраструктуру, такую ​​как RhinoMocks, что некоторые называют "упрямой" структурой. RhinoMocks и некоторые другие насмешливые рамки имеют очень сильные мнения о том, как система должна быть разработана для того, чтобы объекты были издевались. Структура, подобная RhinoMocks, предполагает, что ваш проект будет разработан определенным образом. Сфокусировать, конечно, намного проще с RhinoMocks, когда вы правильно построили свой код (без закрытых классов, без статики, интенсивного использования интерфейсов, виртуальных методов класса и т.д.).

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

Также было бы полезно узнать, почему вы выбираете насмешливую структуру, которую используете в настоящее время, и если вы все еще довольны тем, что выбираете.

Я выбрал RhinoMocks, потому что в то время (3+ года назад) это была явно самая зрелая фальшивая структура с большинством функций. Я остался с ним, потому что он развился далеко, что делает мою жизнь намного проще (появление контейнера AutoMocking является гигантским шагом к повышению эффективности).

Что мне нравится в RhinoMocks, кроме набора функций и простоты использования, заключается в том, что он помогает мне улучшить дизайн моего кода. Я не идеальный программист, и я буду ошибаться в дизайне. Но инструменты, такие как RhinoMocks и NHibernate, помогают мне улучшить дизайн, потому что, когда я делаю ошибки и создаю плохой дизайн, эти инструменты становятся болезненными для работы. Например, NHibernate с трудом работает, если у вас плохой дизайн базы данных. RhinoMocks очень больно работать, если у вас плохой дизайн, не используются интерфейсы, не используются IoC... и т.д.

Мне нравится RhinoMocks, потому что это в конечном итоге помогает мне стать лучшим разработчиком, а не только потому, что я тестирую свой код, а потому, что я улучшаю свой код - проектируя его.

Ответ 2

Я предпочитаю Moq для проектов .NET 3.5. Он прост в использовании и, по моему опыту, помогает производить чистые и четкие модульные тесты.

Нет никаких технических причин, по которым вы не можете использовать более одного фальшивого фреймворка в одном проекте. Конечно, неплохо стандартизировать, но некоторые тесты могут лучше поддаваться некоторым фреймворкам.

Ответ 3

Отказ от ответственности - я работаю для Typemock

Я не согласен с тем, что "Typemock не ведет вас к хорошему дизайну". Это вы, разработчик, управляете хорошим или плохим дизайном, а не инструментом, который вы используете. Получите инструмент, который выполняет свою работу, и сделает вас продуктивным, но ответственность за хороший дизайн - ваша. Если вы считаете, что обертывание всех видов абстракций внутри вашего кода, просто для тестирования, пойдите для этого, но вы не можете придумать "хороший" дизайн. Это может быть более сложным, чем дизайн, который у вас есть прямо сейчас.

Ответ 4

Что следует учитывать при выборе фальшивой структуры для .Net

Еще один аспект, который следует учитывать, помимо дизайна базы кода, которую вы тестируете, - это то, насколько читабельны ваши тесты при использовании mocks.

В этой связи я ставлю на голосование NSubstitute - одну из новых фальсифицированных фреймворков с очень выразительным API (нет lambdas) и сопоставимые функциональные возможности с Moq и Rhino Mocks. Он недавно достиг версии 1.0.

Пример использования (с домашней страницы NSubstitute):

//Create:
var calculator = Substitute.For<ICalculator>();

//Set a return value:
calculator.Add(1, 2).Returns(3);
Assert.AreEqual(3, calculator.Add(1, 2));

//Check received calls:
calculator.Received().Add(1, Arg.Any<int>());
calculator.DidNotReceive().Add(2, 2);

//Raise events
calculator.PoweringUp += Raise.Event();

Подробное сравнение читаемости тестов с использованием RhinoMocks, Moq и NSubstitute предоставляется здесь.

Ответ 5

stubs выглядит интересным, и я думаю, что он может поставляться с .NET V4. Я не знаю, как выпускать студию разработчика, вам нужно будет ее использовать. В настоящее время вы можете скачать его по приведенной выше ссылке.

Stubs - это облегченная структура для тестовые заглушки и обходные пути в .NET, которые на основе делегатов, введите безопасный, рефакторируемый и исходный код генерироваться. Stubs была разработана поддержка сценарий исполнения сценариев Code Contracts и обеспечить минимальные накладные расходы Pex белый ящик. Можно использовать заглушки для любого метода .NET, включая не виртуальные/статические методы в запечатанных типы.

(Я опубликовал это как answser, а затем добавил его в quesion, так как я никогда не использовал Stabs и трачу несколько минут на него)

Ответ 6

RhinoMock - это довольно современная фальшивая инфраструктура для .NET. Не может пойти не так. Я думаю, вы можете посмотреть его "стиль" как "Джек всех профессий", если хотите.

С веб-сайта :

Что предлагает Rhino Mocks?

  • Явная модель записи и воспроизведения для ожиданий.
  • Привязка Natural Arrange, Act, Assert.
  • Поддержка .Net 2.0 и .Net 3.5
  • Работа с сильно типизированными макетами.
  • Настройка действий по методам, возврат значения spyific или исключение.
  • Ожидания, основанные на:
    • Аргументы, соответствующие
    • Соответствие соответствия
    • Пользовательский обратный вызов для проверки ожидаемых аргументов с помощью собственного кода

Ответ 7

Я бы порекомендовал FakeItEasy. Это действительно описательная фальшивая структура, которая позволяет очень легко читать и насмехаться над интерфейсами. Он имеет активное сообщество с открытым исходным кодом и работает очень хорошо.

Ответ 8

Я использую Telerik JustMock, это очень профессиональная и простая макетная фреймворк с хорошим документом.