2

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

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

还有其他我应该包括的情况吗?

4

2 回答 2

0

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

我正在测试视图(不是视图数据),所以测试重定向和视图名称就足够了。

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

不过,对于每个人来说,每个人都是不同的。

于 2013-06-11T16:15:56.707 回答
0

如果您可以发布您尝试测试的确切操作,那就太好了。看起来您已经涵盖了大部分内容,以下是您可能需要考虑的一些想法。

是的,您会编写一个单元测试来比较视图名称。如果有人更改您的操作以重定向到不同的视图,您希望测试失败。

不确定您的操作以 RedirectRouteResult 还是 ViewResult 的形式返回。我不会为重定向编写单元测试,除非您的操作执行重定向。您会倾向于测试当前行为而不是尚未实施的行为。如果您的操作执行重定向,那么是的,您将为此编写一个测试。

如果 ActionResult 返回 ViewData 是的,您将编写一个测试以确保结果包含预期的 View Data。这是IMO的一项重要测试。

如果您的操作中有存储库调用或服务调用,您还可以编写一个测试来验证已使用预期参数调用了模拟/服务。如果您使用的是 Moq 等隔离框架,则可以轻松设置此期望值。并非总是如此,但有时如果您的操作方法微不足道,这可能会很有用。

如果你想更透彻,我也会写一个测试来确保你的动作方法被某个属性修饰。例如 [HttpPost]、[HttpGet] 或您可能使用的任何其他属性。

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

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

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

于 2013-06-16T11:28:50.113 回答