2010-12-10 3 views
7

Ich versuche, den MvcContrib Test Helper zu verwenden, um eine Controller-Methode in MVC3 zu testen.MvcContrib TestHelper gibt einen seltsamen Fehler bei der Verwendung von AssertViewRendered

Der Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Der Test:

[TestMethod] 
public void Index() 
{ 
    // Arrange 
    HomeController controller = new HomeController(); 

    // Act 
    ViewResult result = controller.Index() as ViewResult; 

    // Assert 
    result.AssertViewRendered().ForView("Index"); 
} 

Der Fehler:

Test method Tests.Web.Controllers.HomeControllerTests.Index threw exception: MvcContrib.TestHelper.ActionResultAssertionException: Expected result to be of type ViewResult. It is actually of type ViewResult.

Irgendwelche Ideen?

Antwort

3

Mein Vermutung ist, dass Sie den MVCContrib für MVC2 verwenden, und es MVC2 ViewResult verwendet. Währenddessen senden Sie ein MVC3 ViewResult zurück.

Haben Sie versucht, MVCContrib gegen MVC3 zu kompilieren?

+0

Genau das gleiche mit einem MVC2 Projekt versucht, und dass alles funktioniert – Ali

+0

@ Ali: Was wirst du tun? Geh zurück zu MVC 2? Ich habe auch MVC 3 RC 2 heruntergeladen und bekomme den gleichen Fehler. Ist MVC contrib mit MVC 3 kompatibel? –

+0

Nicht sicher, um ehrlich zu sein. Dies ist für ein persönliches Projekt, und ich versuche, einen TDD-Ansatz zu verwenden. Ich wollte den MVC contrib Test Helper jetzt nicht benutzen. – Ali

1

Wenn jemand den gleichen Fehler im Jahr 2012 begegnet, habe ich das gleiche Problem mit MVC4 und MVCContrib arbeiten gegen MVC3.

Die Lösung bestand darin, den Quellcode für MvcContrib herunterzuladen. Entfernen Sie im MVCContrib.TestHelper-Projekt den Verweis auf System.Web.Mvc (standardmäßig verweist es auf Version 3), und fügen Sie System.Web.Mvc hinzu. Stellen Sie jedoch sicher, dass Sie auf Version 4.0.0 verweisen.

Dann erstellen Sie das Projekt neu, kopieren Sie generierte DLL-Dateien mit pdb (um in den TestHelper-Code zu gelangen) in Ihre Lösung und fügen Sie einen Verweis auf diese DLL hinzu. Arbeitete für mich!

+0

Das ist, was für mich funktionierte. Das Hinzufügen der Bindungsumleitung machte keinen Unterschied in VS2012, es schien ... – JTech

+0

Ich ersetzte TestHelper mit FluentMVCTesting. – trailmax

7

MVCContrib.TestHelper verwendet eine ältere Version von MVC. Die Seite hat jetzt eine MVC3-Version, aber während ich schreibe, ist diese MVC4 out und ein aktualisiertes MVCContrib.TestHelpers für MVC4 existiert noch nicht.

Ohne die Quelle zu berühren, können Sie dies mit einer verbindlichen Umleitung beheben. Legen Sie diese in Ihrem Test app.config:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Die obigen Abtastpunkte alle Baugruppen für MVC-Version fragen 1-3 zu verwenden 4.

+0

Ich habe gerade das MvcContrib.Mvc3.TestHelper-ci-Paket in meinem Test-Projekt in VS2012 hinzugefügt. Ich habe eine "app.config" -Datei zum Test-Projekt hinzugefügt und irgendwo auf dem Weg fügte etwas die obige verbindliche Weiterleitung in Ihrer app.config für mich hinzu (ich denke, es war NuGet). Jedenfalls schaffte es das alleine nicht, das Problem zu beheben. Ich habe immer noch den "... erwarteten Typ 'ViewResult', aber tatsächlich war Typ 'ViewResult'" Problem. Die Lösung für mich in VS2012 ist wie @trailmax angegeben ... kompilieren Sie das MvcContrib.TestHelper Projekt mit ASP.Net MVC 4. – JTech

+0

Ich hatte die gleichen Ergebnisse für VS12. Ich musste den Testhelfer neu kompilieren, indem ich die neuere mvc-DLL verwendete. Das obige funktioniert in VS10. Nicht sicher, warum es nicht in VS12 ist. – klabranche

Verwandte Themen