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