我有一个ArticleController,它根据类别显示文章列表。
public ActionResult List(string categoryname)
{
MyStronglyTypedViewData vd = new MyStronglyTypedViewData();
DBFactory factory = new DBFactory();
categoryDao = factory.GetCategoryDao();
articleDao = factory.GetArticleDao();
vd.Category = categoryDao.GetByName(categoryname);
vd.Articles = articleDao.GetByCategoryId(vd.Category.Id);
return View(vd);
}
如果我要对这个动作进行单元测试,究竟是什么目的呢? 确保正在打开正确的视图?
答案 0 :(得分:8)
MyStronglyTypedViewData
这一行DBFactory factory = new DBFactory();
让我觉得编写单元测试很困难,因为你没有使用可以被模拟的接口,而是依赖于可能击中实际数据库的具体类。
答案 1 :(得分:3)
还要考虑错误情况:categoryname
是来自网络的字符串。如果用户通过“坏”操作,该操作应该如何表现?在我看来你可能会得到一个空引用错误?
将错误案例作为功能案例进行测试同样重要。
答案 2 :(得分:1)
测试categoryDao.GetByName(categoryname);
和articleDao.GetByCategoryId(vd.Category.Id);
返回的对象中的各种边缘情况。测试它们抛出异常时会发生什么
另外,如果你认为你的设计可以更好,如果它坚持Dependency Inversion Principle(我只是说“如果”;你是否应该相信这是一个单独的问题),那么试着写一个井对您的方法进行隔离单元测试并打破依赖关系可能是一项有用的练习,可以改进您的程序设计。
答案 3 :(得分:1)
这是我们团队得出的结论,即每个控制器必须验证的内容(我们使用BDD):