TestMethod for MVC Action方法的场景是什么?

时间:2013-06-11 16:03:08

标签: asp.net-mvc unit-testing asp.net-mvc-4

我是MVC设计模式的新手。我已经开始为这些动作创建测试方法。目前我正在为以下内容创建测试方法:

  • 控制器操作返回的测试视图,用于比较视图名称。
  • 测试控制器操作返回的视图数据。
  • 测试一个控制器操作是否将您重定向到第二个控制器操作。

我还应该包括其他任何情景吗?

2 个答案:

答案 0 :(得分:0)

我最近不得不问自己同样的问题,这就是我所做的:

我正在测试视图(而非视图数据),因此测试重定向和查看名称就足够了。

如果我开始测试数据,那么我希望系统的某些其他部分以某种方式返回某些数据(映射器,服务层,存储库)。但现在我不再测试我的视图我正在测试我的服务层返回某些值并且我的mapper正确地映射了这些值。所以我把它留给了我的存储库/服务测试。

对于他自己的每个人 - 每个人都不同。

答案 1 :(得分:0)

如果您可以发布您尝试测试的确切操作,那就太好了。看起来你已经覆盖了最多,下面是你可能想要考虑的一些想法。

是的,你会写一个单元测试来比较视图名称。如果有人将您的操作更改为重定向到其他视图,则您希望测试失败。

不确定您的操作是以RedirectRouteResult还是ViewResult的形式返回。除非你的动作执行重定向,否则我不会为重定向编写单元测试。你倾向于测试当前的行为,反对尚未实现的行为。如果您的操作执行重定向,那么您可以为此编写测试。

如果ActionResult返回ViewData,则会编写测试以确保结果包含预期的视图数据。这是IMO的重要考验。

如果您在操作中有存储库调用或服务调用,您还可以编写测试以验证是否已使用期望参数调用模拟/服务。如果您使用的是隔离框架(如Moq),则可以轻松设置此期望值。并非总是如此,但有时如果您的操作方法很简单,这可能会有用。

如果你想要更多,我还会写一个测试,以确保你的动作方法是用某个属性装饰的。例如[HttpPost],[HttpGet]或您可能使用的任何其他属性。

看下面我的帖子应该给你一些例子。 http://blog.rajsoftware.com/post/2012/12/04/Simple-test-helper-MVC-Action-has-decorated-with-a-certain-attribute.aspx

另外要明确的是,您不希望在一个单元测试中测试所有这些场景。它们应该在单独的测试中。

重要的是查看Action并确保您的测试尽可能地涵盖Action的实现行为。