asp.net mvc测试:无法访问对象内部的动作

时间:2010-10-14 13:15:25

标签: asp.net-mvc unit-testing

具有

public ActionResult Create(CategoryViewModel viewModel)
    {
        if (!ModelState.IsValid)
        {
            return View(viewModel);
        }
        Category category = new Category();
        category.Parent = daoTemplate.FindByID<Category>(viewModel.ParentId);
        category.CopyFrom(viewModel);
        daoTemplate.Save(category);
        return RedirectToAction("Index");
    }

我需要确保新创建的类别具有正确的父集。如果我无权访问方法之外的类别对象,我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

最终,你提出的测试确实是在验证两件事:

1)daoTemplate.FindByID<T>()按预期工作

2)Create方法调用daoTemplate.FindByID<T>()

这应该是两个单独的测试。

第一个测试应该是DaoTemplate装置的一部分 - 除了在没有看到更多源代码的情况下很难对其进行评论。

其次,要验证操作是否调用了预期的方法,您需要手动滚动模拟对象或使用模拟框架。 C#有许多流行的模拟框架(Moq,RhinoMocks,甚至是古老的NMock2 - 一开始就看到古老的stackoverflow问题What C# mocking framework to use?),开始模拟的经典之处是Martin Fowler的文章“{{ 3}}“。