Asp.Net MVC 教程单元测试 - 史蒂夫桑德森

本文关键字:史蒂夫 单元测试 Net MVC 教程 Asp | 更新日期: 2023-09-27 18:34:50

我正在研究Steve Sanderson的书Pro ASP.NET MVC Framework,我在一个单元测试中遇到了一些问题,产生了错误。

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

 [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.

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

Asp.Net MVC 教程单元测试 - 史蒂夫桑德森

您输入了几个错别字,需要更新以下行:

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

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

在产品控制器中,本教程让您将视图结果更新为:

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

该书随后指出:"我们更改了List操作方法的签名,这将阻止我们现有的一些单元测试方法进行编译。若要解决此问题,请将 null 作为第一个参数传递给那些与控制器一起使用的单元测试中的 List 方法。 - 第 203 页