在单元测试控制器动作时提供显式视图名称?

时间:2009-05-20 10:52:02

标签: asp.net-mvc unit-testing

Stephen Walther recommends,当你想对它们进行单元测试时,你应该提供明确的视图名称。

我绝对想测试它们,但我很好奇这个推荐是否仍然适用于1.0版本。

NerdDinner tutorial测试中,只检查viewResult是否为null。它们没有显式指定viewName,因此它是空的。 我想删除在实际代码中作为字符串提供的视图名称,但这些检查对我来说似乎没那么有用......  (我甚至不能想到viewResult确实返回null的情况?!)

2 个答案:

答案 0 :(得分:3)

这里有两个独立的问题。首先是自从斯蒂芬·沃尔特(Stephen Walther)撰写将改变建议的建议以来MVC框架中是否有任何变化。这个问题的答案是“不”。

第二个问题是该建议是否是一种良好做法。我在这里不同意Stephen Walther。他的例子有点奇怪。他对“索引”操作的单元测试试图断言该操作返回一个显式视图名称,但显然它没有。如果我写了这个单元测试,我会断言视图名称等于空字符串。然后单元测试将通过。然后,单元测试将有效地断言该操作指定视图与操作具有相同的名称,而不是断言操作指定某个名称的视图。这是一个合法的测试方法。

MVC框架背后的一个指导原则是约定优于配置。换句话说,不应要求您指定任何通常的默认值。视图名称的默认值与操作名称相同。 WebFormsViewEngine的记录行为是查找与操作同名的视图,除非指定了单独的视图名称。因此,不指定视图名称与指定“使用默认视图名称”相同。

因此,我认为指定一个与默认名称相同的视图名称并不是一个好主意,我不认为使用单元测试是违反此约定的好理由。

答案 1 :(得分:0)

如果控制器可以返回各种视图,则提供显式视图名称很重要。然后你可以单元测试控制器,它返回一个它应该按名称返回的控制器。否则 - 我没有看到使用它们的意义。