AutoFixture не может создать анонимный контроллер MVC

Код:

IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.Customize<ViewDataDictionary>(c => c.Without(x => x.ModelMetadata));
var target = fixture.CreateAnonymous<MyController>();

исключение:

System.Reflection.TargetInvocationException: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> System.NotImplementedException: метод или операция не реализованы.

MyController() принимает 3 параметра.

Я пробовал исправить, описанное в ответе здесь, но это не сработало.

1 ответ

Решение

Похоже, что при использовании MVC 4 вы должны настроить Fixture пример по-другому.

Тест должен пройти, если вы замените:

fixture.Customize<ViewDataDictionary>(c => c
    .Without(x => x.ModelMetadata));

с:

fixture.Customize<ControllerContext>(c => c
    .Without(x => x.DisplayMode));

При желании вы можете создать композицию из необходимых настроек:

internal class WebModelCustomization : CompositeCustomization
{
    internal WebModelCustomization()
        : base(
            new MvcCustomization(),
            new AutoMoqCustomization())
    {
    }

    private class MvcCustomization : ICustomization
    {
        public void Customize(IFixture fixture)
        {
            fixture.Customize<ControllerContext>(c => c
                .Without(x => x.DisplayMode));
        }
    }
}

Затем оригинальный тест можно переписать так:

[Fact]
public void Test()
{
    var fixture = new Fixture()
        .Customize(new WebModelCustomization());

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

    Assert.IsAssignableFrom<IController>(sut);
}
Другие вопросы по тегам