AutoFixture как контейнер Automocking против различий Automocking?

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

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

Автофиксирование в качестве контейнера для автоматической проверки подлинности

Автомобилинг

Я не понимаю, как использовать первый вообще. Я вроде как получил второй, но никогда не пробовал.

Я не уверен, что один лучше другого. Единственное, что я знаю, я уже использую AutoFixtures, что является зависимостью от первого.

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

Edit

Я пытаюсь следовать примерам Никоса Баксеваниса, но сталкиваюсь с ошибками.

Failure: System.ArgumentException : A matching constructor for the given arguments was not found on the mocked type.
  ----> System.MissingMethodException : Constructor on type 'DatabaseProxyded46c36c8524889972231ef23659a72' not found.


var fixture = new Fixture().Customize(new AutoMoqCustomization());
        var fooMock = fixture.Freeze<Mock<IFoo>>();
       // fooMock.Setup(x => x.GetAccounts(It.IsAny<IUnitOfWork>()));
        var sut = fixture.CreateAnonymous<AdminService>();

        sut.Apply();
        fooMock.VerifyAll();

Думаю, это из-за моего свойства unitOfWork в petapoco

PetaPoco.Database Db { get; }

Не уверен, смогу ли я это как-то смаковать или как.

12 голосов | спросил chobo2 13 +04002012-10-13T03:00:41+04:00312012bEurope/MoscowSat, 13 Oct 2012 03:00:41 +0400 2012, 03:00:41

1 ответ


0

Хотя я никогда не использовал moq-contrib Automocking, я, вероятно, мог бы предоставить некоторую информацию об использовании AutoFixture в качестве контейнера для автоматической проверки.

В настоящее время есть поддержка Moq, Rhino Mocks, FakeItEasy и NSubstitute. Просто установите соответствующее расширение AutoMoq , AutoRhinoMocks , AutoFakeItEasy и AutoNSubstitute .

После того, как вы установили одно из расширений для Auto Mocking, вызов extra будет следующим:

var fixture = new Fixture()
    .Customize(new AutoMoqCustomization());

(или если вы используете Rhino Mocks)

var fixture = new Fixture()
     .Customize(new AutoRhinoMockCustomization());

(или если вы используете FakeItEasy)

var fixture = new Fixture()
     .Customize(new AutoFakeItEasyCustomization());

(или, если вы используете NSubstitute)

var fixture = new Fixture()
     .Customize(new AutoNSubstituteCustomization());

Пример 1

public class MyController : IController
{
    public MyController(IFoo foo)
    {
    }
}

public interface IFoo
{
}

Ниже описано, как использовать автофикс для создания экземпляров класса MyController:

var fixture = new Fixture()
    .Customize(new AutoMoqCustomization());

var sut = fixture.CreateAnonymous<MyController>();

Теперь, если вы проверите переменную sut, вы увидите IFoo - это макетированный экземпляр (имя типа похоже на Castle.Proxies.IFooProxy) .

Пример 2

Этот пример расширяет предыдущий.

Вы можете указать AutoFixture использовать собственный предварительно настроенный макетный экземпляр:

var fooMock = fixture.Freeze<Mock<IFoo>>();
// At this point you may setup expectation(s) on the fooMock.

var sut = fixture.CreateAnonymous<MyController>();
// This instance now uses the already created fooMock.
// Verify any expectation(s).

Вот и все - но это может пойти дальше!

Ниже приведены предыдущие примеры использования AutoFixture с упадком с xUnit.net extension .

Пример 1

[Theory, AutoMoqData]
public void TestMethod(MyController sut)
{
    // Start using the sut instance directly.
}

Пример 2

[Theory, AutoMoqData]
public void TestMethod([Frozen]Mock<IFoo> fooMock, MyController sut)
{
   // At this point you may setup expectation(s) on the fooMock.
   // The sut instance now uses the already created fooMock.
   // Verify any expectation(s).
}
  

Вы можете найти дополнительную информацию в этом блоге, который содержит ссылки на все, что связано с AutoFixture, xUnit.net и Auto Mocking.

Надеюсь, это поможет.

ответил Nikos Baxevanis 13 +04002012-10-13T11:42:38+04:00312012bEurope/MoscowSat, 13 Oct 2012 11:42:38 +0400 2012, 11:42:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132