难以启动基本单元测试(样本来自我的书 - SportsStore)

时间:2010-04-28 20:33:55

标签: asp.net-mvc unit-testing

我是TDD的新手,实际上,我正在尝试按照我的书中的示例( SportsStore - Pro ASP.NET MVC Framework / Steve Sanderson / APRESS )。我在第103-105页。

虽然有更多内容,但对于所有这些内容的新内容,我关注以下陈述。

ProductsController controller = new ProductsController(repository);
var result = controller.List(2);
     //...

关于上述陈述,当我写这篇文章时(如书中所述),

var products = result.ViewData.Model as IList<Product>;

我收到编译错误“ System.Web.MVC.ActionResult”不包含ViewData的定义...... “但是,当我删除 List()从语句中,然后编译器错误消失。

var result = controller.List(2);//Doesn't work
var result = controller;//It works

那里有什么问题吗?我检查了Apress网站上的那本书,但没有列为勘误或问题。 所以我真的迷路了。

感谢您的帮助

4 个答案:

答案 0 :(得分:8)

这是因为actionresult不包含viewdata howerver viewresult的定义,而viewresult实际上是一个actionresult,所以你可以将它转换为(ViewResult)然后获取viewdata

答案 1 :(得分:1)

var products = ((ViewResult)result).ViewData.Model as IList<Product>;

答案 2 :(得分:1)

您可能还缺少测试项目中的System.Web.Mvc库

答案 3 :(得分:0)

或者,您可以从以下位置更改Products Controller中的代码:

public *Action*Result List()
{
     return View(productsRepository.Products.ToList());
}

为:

public *View*Result List()
{
     return View(productsRepository.Products.ToList());
}

ViewResult是基类ActionResult的子类。