Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单的MVC ASP.Net测试_C#_Asp.net Mvc_Unit Testing - Fatal编程技术网

C# 简单的MVC ASP.Net测试

C# 简单的MVC ASP.Net测试,c#,asp.net-mvc,unit-testing,C#,Asp.net Mvc,Unit Testing,我有来自公认来源的以下示例控制器代码: public class HomeController : Controller { MyStoreEntities storeDB = new MyStoreEntities(); public ActionResult Index() { var albums = GetTopSellingAlbums(5); return View(albums);

我有来自公认来源的以下示例控制器代码:

public class HomeController : Controller
{       
    MyStoreEntities storeDB = new MyStoreEntities();

    public ActionResult Index()
    {     
        var albums = GetTopSellingAlbums(5);     
        return View(albums);
    }

    private List<Album> GetTopSellingAlbums(int count)
    {            
        return storeDB.Albums
            .OrderByDescending(a => a.OrderDetails.Count())
            .Take(count)
            .ToList();
    }
}
公共类HomeController:控制器
{       
MyStoreEntities storeDB=新建MyStoreEntities();
公共行动结果索引()
{     
var albums=GetTopSellingAlbums(5);
返回视图(相册);
}
私有列表GetTopSellingAlbums(整数计数)
{            
返回storeDB.Albums
.OrderByDescending(a=>a.OrderDetails.Count())
.记(数)
.ToList();
}
}
我想编写一个非常简单的测试来检查Index()方法是否返回了5个相册

我想像这样的事情可能会成功:

HomeController controller = new HomeController();
var result = controller.Index() as ViewResult;
var albums = (List<Album>)result.ViewData;
Assert.AreEqual(5, albums.Count);
HomeController=新的HomeController();
var result=controller.Index()作为ViewResult;
var albums=(List)result.ViewData;
Assert.AreEqual(5个,相册数);
但是model.Count()的值始终为0

首先,我是否遗漏了什么——可能吗

其次,我这样做是为了学习很多关于遗留代码的原则。我有这个代码,我知道可以对它进行改进。它也没有测试

我的计划是用测试覆盖现有代码,并认真修改它

因此,请不要在这里或那里做出诸如“坏习惯”之类的回应,也不要实现这一层或那一模式,因为这将在稍后出现

请用最简单的方法来测试上述代码确实会有帮助:)

也许即使是好的博客或书籍也会有所帮助

谢谢


Davy

您可以使用
ViewDataDictionary
类的
model
属性访问模型:

albums = (List<Album>)result.ViewData.Model;
albums=(List)result.ViewData.Model;

如果您有兴趣了解如何使用遗留代码,没有比“使用遗留代码”代码手册更好的来源了

感谢1月的回复-但是,相册的数量始终为0,从不为5:(当你调试GetTopSellingAlbums时,会返回5个相册?是的,我有Micheal Feathers的书要读-谢谢。数据库中有相册数据吗?控制器所属的网站在连接到与测试相同的db时是否显示数据?测试和网站是否使用相同的db连接字符串?