2010-12-10 14 views
7

Próbuję użyć pomocnika testowego MvcContrib, aby przetestować metodę kontrolera w MVC3.MvcContrib TestHelper daje nieparzysty błąd podczas korzystania z AssertViewRendered

Kontroler:

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

Test:

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

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

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

Błąd:

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.

Jakieś pomysły?

Odpowiedz

3

Moim zdaniem jest to, że używasz MVCContrib dla MVC2 i używa MVC2 ViewResult. Podczas gdy zwracasz MVC3 ViewResult.

Czy próbowałeś skompilować MVCContrib przeciwko MVC3?

+0

prostu próbowałem to samo z MVC2 Projektu i że wszystko działa – Ali

+0

@ Ali: Co więc zrobisz? Wróć do MVC 2? Również pobrałem MVC 3 RC 2 i otrzymuję ten sam błąd. Czy MVC contrib jest kompatybilny z MVC 3? –

+0

Nie jestem szczery. to jest dla osobistego projektu i próbuję użyć podejścia TDD. Po prostu nie zamierzałem teraz używać pomocnika testowego MVC contrib. – Ali

1

Jeśli ktoś spotka się z tym samym błędem w 2012 roku, mam taki sam problem z MVC4 i MvcContrib pracującymi przeciwko MVC3.

Rozwiązaniem było pobranie kodu źródłowego dla MvcContrib. W projekcie MVCContrib.TestHelper usuń odwołanie do System.Web.Mvc (domyślnie wskazuje to na wersję 3) i dodaj System.Web.Mvc, ale upewnij się, że odwołujesz się do wersji 4.0.0.

Następnie przebuduj projekt, skopiuj wygenerowane pliki dll za pomocą pdb (do wkroczenia w kod TestHelper) do swojego rozwiązania i dodaj odniesienie do tej biblioteki DLL. Pracował dla mnie!

+0

To właśnie dla mnie zadziałało. Dodanie wiążącego przekierowania nie zrobiło żadnej różnicy w VS2012 wydawało się ... – JTech

+0

Skończyło się na zastąpieniu TestHelpera FluentMVCTesting. – trailmax

7

MVCContrib.TestHelper używa starszej wersji MVC. Strona ma teraz wersję MVC3, ale kiedy piszę, MVC4 jest już dostępny, a zaktualizowany MVCContrib.TestHelpers dla MVC4 jeszcze nie istnieje.

Bez dotykania źródła można to naprawić za pomocą wiążącego przekierowania. Umieść to w swojej testowego 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> 

powyższych punktów próbnych wszystkie zespoły z prośbą o MVC wersji 1-3 używać 4.

+0

Właśnie dodałem pakiet MvcContrib.Mvc3.TestHelper-ci do mojego projektu testowego w VS2012. Dodałem plik app.config do projektu testowego i gdzieś po drodze coś dodawało dla mnie powyższe wiążące przekierowanie w pliku app.config (uważam, że był to NuGet). W każdym razie to nie tylko rozwiązało problem. Nadal mam "... oczekiwany typ" ViewResult ", ale aktualny był problem typu" ViewResult ". Rozwiązaniem dla mnie w VS2012 jest jak @trailmax stwierdził ... przekompilować projekt MvcContrib.TestHelper z ASP.Net MVC 4. – JTech

+0

Miałem takie same wyniki dla VS12. Musiałem przekompilować testowego pomocnika przy użyciu nowszej biblioteki dll mvc. Powyższe działa w VS10. Nie wiem, dlaczego tak nie jest w VS12. – klabranche

Powiązane problemy