2010-12-11 22 views
0

J'ai une classe de modèle de vue comme suit:NUinit CollectionAssert ne fonctionne pas comme prévu

public class MyViewModel 
    { 
     // Other properties...... 

     public IEnumerable<SelectListItem> SecurityQuestions { get; set; } 
    } 

Dans mon contrôleur je le code suivant:

public ViewResult Index() 
{ 
    var viewModel = new MyViewModel {SecurityQuestions = GetSecurityQuestions()}; 

    return View(viewModel); 
} 

public IEnumerable<SelectListItem> GetSecurityQuestions() 
{ 
    return new SelectList(_securityQuestionService.GetAll(), 
          "SecurityQuestionID", 
          "Question"); 
} 

J'ai écrit un test unitaire pour tester la Méthode d'action d'index:

[Test] 
    public void Can_Load_View_With_Security_Questions() 
    { 
     var result = _controller.Index(); 
     var questions = _controller.GetSecurityQuestions(); 
     var viewModel = result.ViewData.Model as MyViewModel; 

     CollectionAssert.AreEqual(questions, viewModel.SecurityQuestions); 
    } 

Je m'attendais à ce que ce test passe sans aucun problème. Mais je reçois l'erreur ci-dessous:

Expected: <System.Web.Mvc.SelectList> 
But was: <System.Web.Mvc.SelectList> 

Pourquoi cela se produit-il?

+0

De quel type '_securityQuestionService.GetAll()' retourne-t-il? –

+0

Renvoie IEnumerable Kumar

Répondre

0

I was expecting this test to pass without any problems

Pourquoi vous attendriez-vous à une telle chose? Le problème vient peut-être du fait que vous appelez la méthode _securityQuestionService.GetAll() deux fois. La première fois à l'intérieur de l'action du contrôleur et la seconde fois à l'intérieur de votre unité de test qui pourrait différentes instances. De plus, le type SelectList ne remplace pas la méthode Equals, donc ce que vous rencontrez est un comportement normal.