5

我是 MVC 和单元测试的新手。我正在使用 Visual Studio 单元测试框架来测试产品控制器。控制器在实际网站上工作,但在单元测试中总是返回 null。我已经切换关键字,例如 ViewResult 或模型名称,但它们都不起作用,因为控制器总是返回 null。然后我设置断点并开始调试测试代码。当我在即时窗口中对其进行测试时,它具有价值。

我在这里想念什么?

我在此 URL 上有一个屏幕截图:http: //i.imgur.com/XBmoh.png 在屏幕截图中,您可以看到模型从控制器成功传递的即时窗口,P4 P5 存储在结果中。它只是在 UnitTest 中不起作用。

列表代码非常简单,在网站上运行良好。这是代码

    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);
    }
4

2 回答 2

6

之前遇到过这个问题,您的项目中没有使用相同版本的 System.Web.Mvc。您必须在主项目和单元测试项目中引用相同版本的 System.Web.Mvc。

于 2013-01-04T15:59:48.793 回答
0

我注意到在您的单元测试中您两次调用控制器操作......这可能会产生一些意想不到的后果?

试试怎么样:

//Action
ProductionsListViewModel result = (ProductsListViewModel)controller.List(2).Model;
Product prod = result.Products.ToArray();
于 2012-11-26T19:21:25.593 回答