2013-02-20 15 views
7

kodu:AutoFixture nie CreateAnonymous MVC Controller

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

Wyjątek:

System.Reflection.TargetInvocationException: System.Reflection.TargetInvocationException: wyjątek został rzucony przez cel inwokacja. ---> System.NotImplementedException: Metoda lub operacja nie jest zaimplementowana.

MyController() ma 3 parametry.

Próbowałem naprawić opisany w odpowiedzi here, ale nie będzie działać.

+2

Która wersja ASP.NET MVC używasz? Jak wygląda konstruktor 'MyController'? Czy 'MyController' ma jakieś właściwości do zapisu? Czy wyjątek zapewnia więcej szczegółów (np. Ślad stosu)? –

Odpowiedz

21

As it seems, podczas korzystania z MVC 4 należy dostosować instancję Fixture w inny sposób.

Test powinien przechodzić jeśli zastąpić:

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

z:

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

Opcjonalnie można utworzyć composite wymaganych dostosowań:

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

Następnie pierwotne badanie może być zapisane jako:

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

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

    Assert.IsAssignableFrom<IController>(sut); 
} 
+0

geniusz! dzięki. – Tsar

+0

Uwaga dla innych: Musiałem dodać odniesienie do 'System.Web.WebPages', aby to skompilować –

+0

FYI jest to również wymagane dla' MVC 5.1.2'. – MEMark

Powiązane problemy