Asp.Net Mvc Unittesting一个控制器动作

时间:2009-10-29 11:48:32

标签: asp.net-mvc unit-testing

我有以下行动,我试图进行单元测试:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Default(ProductsViewModel model)
    {
        var locationId = model.LocationId;
        var locationText = model.LocationText;

        return locationId > 0 ? Summary(locationId, locationText, 1, "Date", true) : View();
    }

如果viewmodel为空,则只返回一个视图。但是如果它包含一个id,那么调用summary动作并完成所有工作(调用db,构建一个新的viewmodel等)。

但是我如何在单元测试中断言它被调用?

1 个答案:

答案 0 :(得分:2)

据推测,您已经对Summary进行了测试,涵盖了它应该做的事情。在这种情况下,我可能会选择能够区分两者的东西,即只有在调用Summary并对其进行测试时才会出现这种情况。例如,在调用Summary的情况下,您可以检查非null模型,并且可能正确设置了Model属性。我能看到的唯一另一种选择是部分模拟控制器并设置调用该方法的期望。

注意,我并没有假设您正在进行TDD,但如果您这样做,那将毫无意义。如果您正在进行TDD,那么您已经对Summary(可能)的大部分内容进行了一系列测试,并且会因重构而使用Summary进行测试。那时,您现有的测试 - 以及您对Summary的测试 - 可能就足够了,您不需要任何进一步的测试。至少,您不需要复制任何摘要测试已经覆盖的内容。