The code:
IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.Customize<ViewDataDictionary>(c => c.Without(x => x.ModelMetadata));
var target = fixture.CreateAnonymous<MyController>();
the Exception:
System.Reflection.TargetInvocationException: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NotImplementedException: The method or operation is not implemented.
MyController() takes 3 parameters.
I've tried the fix described in the answer here but it wouldn't work.
As it seems, when using MVC 4 you have to customize the Fixture instance in a different way.
The test should pass if you replace:
fixture.Customize<ViewDataDictionary>(c => c
    .Without(x => x.ModelMetadata));
with:
fixture.Customize<ControllerContext>(c => c
    .Without(x => x.DisplayMode));
Optionally, you can create a composite of the required customizations:
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));
        }
    }
}
Then, the original test could be rewritten as:
[Fact]
public void Test()
{
    var fixture = new Fixture()
        .Customize(new WebModelCustomization());
    var sut = fixture.CreateAnonymous<MyController>();
    Assert.IsAssignableFrom<IController>(sut);
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With