【问题标题】:Asp.Net MVC Tutorial Unit Tests - Steve SandersonAsp.Net MVC 教程单元测试 - Steve Sanderson
【发布时间】:2013-10-10 14:45:06
【问题描述】:

我正在阅读 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。

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

【问题讨论】:

  • 它说的是哪一行?
  • 能把List方法的代码贴在控制器上吗?
  • 你不是通过在书中输入代码来学习编程的。你通过了解你在做什么以及编译器告诉你什么来学习编程。 NullReferenceException 是什么以及如何调试和消除它们,在 here 中进行了解释。
  • @ysrb 18 行,但是这一行是空的

标签: c# asp.net-mvc unit-testing


【解决方案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

【讨论】:

  • 但它不应该抛出 System.NullReferenceException。 PS我没有投反对票。
  • 我投了反对票。什么教程?这不会抛出 System.NullReferenceException。这可能导致断言失败。但不是 OP 所经历的,所以这个答案没有用,所以如果一个答案没有用,你就投反对票。这就是这个网站的运作方式。
  • 我有他正在读的同一本书,它是一本教程。我更新了我的答案。
  • 好吧,怀疑的好处,但我还是不明白。
  • 他没有贴出控制器所以没有意义,但是在List ViewResult中我们添加了一个额外的参数“string category”
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多