2012-11-26 3 views
5

Ich bin neu in MVC und Unit Test. Ich verwende Visual Studio Unit Test Framework, um einen Produkt-Controller zu testen. Der Controller arbeitet auf der aktuellen Website, gibt aber im Unit-Test immer null zurück. Ich habe Schlüsselwort wie ViewResult oder Name von Model umschaltend, aber alle von ihnen funktionieren nicht, weil Kontrolleur immer Null zurückgibt. Dann setze ich eine Bruchstelle und beginne den Testcode zu debuggen. Wenn ich es im Direktfenster teste, hat es einen Wert.Unit Test auf MVC 3 Controller gibt Null für Ergebnisse zurück, aber ich kann sie im Direktfenster sehen

Was fehlt mir hier?

Ich habe einen Screenshot auf dieser URL: http://i.imgur.com/XBmoh.png Im Screenshot können Sie das Direktfenster sehen, das das Modell vom Controller erfolgreich übergeben wurde, P4 P5 wird im Ergebnis gespeichert. Es funktioniert einfach nicht in UnitTest.

Der List-Code ist recht einfach, es funktioniert gut auf der Website. Hier ist der Code

public int PageSize = 4; 
    private IProductRepository repository; 

    public ProductController(IProductRepository productRepository) 
    { 
     repository = productRepository; 
    } 

    public ViewResult List(int page=1) 
    { 
     ProductsListViewModel viewModel = new ProductsListViewModel 
     { 
      Products = repository.Products 
      .OrderBy(p => p.ProductID) 
      .Skip((page - 1) * PageSize) 
      .Take(PageSize).AsEnumerable(), 
      PagingInfo = new PagingInfo 
      { 
       CurrentPage = page, 
       ItemsPerPage = PageSize, 
       TotalItems = repository.Products.Count() 
      } 
     }; 

     return View(viewModel); 
    } 
+0

Ich denke, es würde helfen, Ihren 'ProductController.List' Code zu veröffentlichen. – Charlino

Antwort

6

hatte dieses Problem vor, Sie sind die gleichen Versionen von System.Web.Mvc in Ihren Projekten nicht verwenden. Sie müssen die gleiche Version von System.Web.Mvc sowohl in Ihrem Hauptprojekt als auch in Ihrem Komponententestprojekt referenzieren.

+0

danke eine Tonne Arvand .. ich hatte mit diesem Problem zu kämpfen. kann nicht einmal denken, dass eine DLL-Version nicht übereinstimmen cud da sein. Nochmals vielen Dank, es funktionierte wie Charme. Wie haben Sie die Lösung herausgefunden? –

+0

Ich hatte zwei Projekte war ein Quellcode (das Beispiel für MVC Pro) war mein eigenes Projekt. Der Quellcode funktionierte, mein Projekt nicht! Da die Codes genau gleich waren, vermutete ich, dass es sich um Referenzen handelte. – Arvand

0

Ich bemerke in Ihrem Unit-Test Sie die Controller-Aktion zweimal aufrufen ... das könnte einige unbeabsichtigte Folgen haben?

Wie wäre es versuchen:

//Action 
ProductionsListViewModel result = (ProductsListViewModel)controller.List(2).Model; 
Product prod = result.Products.ToArray(); 
+0

Ich mache den Test. Ich versuche, wenn das Problem der Besetzung oder nicht. aber beide Ergebnisse sind null. [code] Produkt prod = result.Products.ToArray(); [/ code] prod muss Array sein, damit dies nicht funktioniert. Das Problem ist das Ergebnis ist bereits null. Der Rest des Teils wäre einfach. – SnowFox108

Verwandte Themen