-2

我正在阅读史蒂夫·桑德森 (Steve Sanderson) 的书 Pro ASP.NET MVC 框架,并且我在一个单元测试中遇到了一些问题,这些问题会产生错误。

在下面的示例中,它测试了分页。

 [TestMethod]
 public void Can_Paginate()
 {

        Mock<IProductRepository> mock = new Mock<IProductRepository>();

        mock.Setup(m => m.Products).Returns(new Product[] {
        new Product{ProductID=1,Name="P1"},
        new Product{ProductID=2,Name="P2"},
        new Product{ProductID=3,Name="P3"},
        new Product{ProductID=4,Name="P4"},
        new Product{ProductID=5,Name="P5"}
        }.AsQueryable());

        ProductController controller = new ProductController(mock.Object);    
        controller.PageSize = 3;

        IEnumerable<Product> result = (IEnumerable<Product>)controller.List(2).Model;

        Product[] prodArray = result.ToArray();
        Assert.IsTrue(prodArray.Length == 2);
        Assert.AreEqual(prodArray[0].Name, "P4");
        Assert.AreEqual(prodArray[0].Name, "P5");
}

消息错误是:

测试方法 UnitTestProject3.Peginate.Can_Peginate 抛出异常:System.NullReferenceException。

有没有人遇到过类似的问题或通过了测试?

4

1 回答 1

1

您犯了几个错字,需要更新这些行:

ProductListViewModel result = (ProductsListViewModel)controller.List(null, 2).Model;

Assert.AreEqual(prodArray[1].Name, "P5");

在 ProductsController 中,教程让您将 ViewResult 更新为:

public ViewResult List(string category, int page = 1)

这本书然后指出“我们已经更改了 List 操作方法的签名,这将阻止我们现有的一些单元测试方法编译。为了解决这个问题,在那些使用的单元测试中将 null 作为第一个参数传递给 List 方法控制器。” - 第 页。203

于 2013-10-10T15:01:20.123 回答