2009-04-30 2 views
5

Я знаю, что это довольно субъективно, но я погружаюсь в тестирование и узнаю насмешку, и я пытаюсь понять, какую структуру я должен использовать. Если бы вы могли рассказать мне, какие из них вы рекомендовали и, самое главное, , почему это лучше, чем другие, которые вы использовали Я бы сказал. Или, если кто-нибудь знает, где я могу получить бок о бок сравнение, которое также будет полезно.Ищите лучший openource Mocking framework для .net

+0

Для тех, кто все еще работает через это, также может быть необходимо рассмотреть, какие из этих фреймворков имеют расширения для автомоделирования - например, AutoFac и AutoFixture имеют поддержку Moq, я считаю, что обе они поддерживают некоторые из насмешек (Rhino, NSubstitute и т. д.). Проведите некоторое время в менеджере пакетов, а также посмотрите, насколько они популярны и как недавно они были обновлены в последний раз, когда вы делаете выбор. – LightCC

ответ

3

Мне нравится RhinoMocks, но это только один я использовал:}

Это выглядит многообещающим: http://code.google.com/p/mocking-frameworks-compare/

+0

Есть ли у вас особые симпатии/антипатии? – Micah

+0

Извините, не по себе ... Было очень легко учиться и начинать. Разработчик очень активен и хорошо уважается в сообществе разработчиков. – squillman

3

Я также использую RhinoMocks. Мне особенно нравится шаблон AAA (Arrange-Act-Assert). RhinoMocks упрощает настройку ожиданий и проверяет их с использованием этого шаблона. Синтаксис использует lambdas и цепочку, которая очень хорошо вписывается в LINQ. Сходство в синтаксисе помогает понять и позволяет сделать код более компактным. единственная проблема, с которой я связан, и она не огромна, заключается в том, что для того, чтобы издеваться над методом, он должен быть виртуальным. В некотором смысле это хорошо, потому что это «заставляет» вас реорганизовывать интерфейсы, но это может быть больно, если интерфейс действительно не требуется. Это может усложнить смешение некоторых классов фреймворка. Вы можете обойти это, пометив ваши методы класса виртуальными или, используя классы framework, создав обертку, которую вы издеваетесь над этим. Я не думаю, что эти проблемы уникальны для RhinoMocks.

+1

Это не так, Moq имеет те же «ограничения», что все должно быть абстрактным, реализовывать интерфейс или иметь виртуальных членов. – TheMissingLINQ

0

Я использовал NMock и думаю, что это отлично. http://www.nmock.org/

Однако - это единственный, который я использовал.

+2

Проблема с NMock (по крайней мере, проблема, когда я ее использовал) заключалась в том, что все ваши имена методов были строками. Это означает, что вы не получаете никакой помощи компилятора при изменении интерфейсов. Это также означает, что инструменты рефакторинга не будут успешно изменять тесты. Rhino и Moq по крайней мере не скомпилируются, если вы измените интерфейсы и инструменты рефакторинга. –

+0

Справедливый комментарий - подумайте, что пришло время посмотреть на остальных. – Peanut

6

Я использовал Rhino.Mocks, Moq & NMock. Я предпочитал мок.

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

Я использовал для написания тестов, как это:

[Test] 
public void SomeOtherTest() 
{ 
    //Arrange 
    var mock = new Mock<IFoo>(); 
    var sut = new SystemUnderTest(mock.Object); //never liked doing it this way... 
    mock.Setup(m => x.Bar()).Returns("A whole bunch of ceremonial syntax.."); 
    //Act 
    sut.DoSomething(); 
    //Assert 
    mock.Verify(m => m.Baz()); //Baaaaah, more laaaaambdas 
} 

Теперь я упиваться не-лямбда-eryness

[Test] 
public void NSubTest() 
{ 
    var mock = Substitute.For<IFoo>(); 
    var sut = new SystemUnderTest(mock); //much nicer! 
    mock.Bar().Returns("Look ma! No lambdas!"); 

    sut.DoSomething(); 

    mock.Received().Baz(); 
} 

Окончательная точка для .. его на GitHub ...

http://nsubstitute.github.com/

1

Возможно, вы нашли полезное значение series of posts comparing mocking frameworks Richard Banks.

Примечание: В интересах полного раскрытия, я соавтор NSubstitute который выходит довольно выгодно в сравнении.:)

Смежные вопросы