Ищем лучший фреймворк Mocking с открытым исходным кодом для .net.

StackOverflow https://stackoverflow.com/questions/807646

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Мокк является самым продвинутым.Он использует все возможности .NET 3.5 и C# 3.0.Это было бы интересно:

Другие советы

Я использовал Rhino.Mocks, Moq и NMock.Раньше я предпочитал Moq.

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

Раньше я писал такие тесты:

[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
}

Теперь я наслаждаюсь нелямбда-эрностью

[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();
}

Финальная точка для..это на гитхабе...

http://nsubstitute.github.com/

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

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

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

Вы можете найти Ричарда Бэнкса серия постов, сравнивающих фреймворки для макетирования полезный.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top