NUnit CollectionAssert无法按预期工作

时间:2010-12-11 20:23:59

标签: c# asp.net-mvc-2 nunit

我有一个视图模型类如下:

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

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

在我的控制器中,我有以下代码:

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

    return View(viewModel);
}

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

我已经编写了一个单元测试来测试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);
    }

我期待这个测试没有任何问题。但我收到以下错误:

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

为什么会这样?

1 个答案:

答案 0 :(得分:0)

  

我期待这个测试没有任何问题

为什么你会期待这样的事情?问题可能来自于您两次调用_securityQuestionService.GetAll()方法的事实。第一次在控制器动作内部,第二次在你的单元测试中,这可能是不同的实例。此外,SelectList类型不会覆盖Equals方法,因此您遇到的是正常行为。