ASP.NET MVC3 UI单元测试

时间:2012-05-03 16:25:46

标签: asp.net-mvc-3 unit-testing user-interface

我觉得我陷入了这场政治/宗教之战。从我所做的研究中我发现许多人非常强烈地相信UI测试通过单元测试是愚蠢的,并且是一个真实的人做得更好。我同意。

然而,似乎高层人士告诉我对UI进行单元测试。 (这已经很奇怪,因为他们之前告诉我,我只需要写一个测试计划而不是实际测试)。我真诚地对单元测试不是很熟悉。我正在尝试使用MOQ,但我找到的所有教程都使用存储库而不是服务,我正在构建围绕服务的Web应用程序。

这里的一个例子是服务的一部分:

public class ProductService : Service<Product, EntitiesDbContext>
    {
        ...
        public Product GetProduct(int id)
        {
            return All().FirstOrDefault(p => p.ProductId == id);
        }
        ...
    }

我的假设是我需要创建一个使用Moq的新产品,然后有人使用我的模型验证硬编码输入。我不知道该怎么做。

测试用户界面是我工作的主要部分,因为网站在很大程度上依赖于通过表单的用户输入。我再次发现使用单元测试进行测试非常愚蠢,因为我的模型非常严格,只允许某些输入。

我的问题: 我如何使用MOQ或可能的其他测试框架来测试表单输入? 我听说有些程序可以追踪你的行为,然后复制它们,但我找不到它们也没有成功,我也相信这样的技术会花钱。

5 个答案:

答案 0 :(得分:2)

尝试SeleniumWatin进行用户界面测试。

答案 1 :(得分:1)

Visual Studio 2010 Ultimate具有称为编码UI测试的功能。基本上,您在Internet Explorer中记录您的操作,转换为添加断言的C#代码,然后您在不同的浏览器中重放操作。

但是,对数据库支持的Web应用程序进行测试非常困难,因为您很难弄清楚哪个是新添加的行。为简化问题,您可能需要设置一个示例数据库,该数据库将在按顺序运行测试套件之前重置为其初始状态。

查看有关如何使用编码UI测试的各种TechEd视频。例如。 http://www.youtube.com/watch?v=rZ8Q5EJ2bQM

答案 2 :(得分:1)

您是在测试UI的操作,还是在测试实际UI。

如果您正在测试操作以及他们发送给视图的数据,那么使用NUnitxUnit等内容进行单元测试,并使用moq框架,如MOQRhino Mocks是正确的做法。

如果您正在测试Actual UI(Web服务器返回的HTML),那么使用像Selenium这样的自动化测试框架将是正确的工具

答案 3 :(得分:1)

您也可以尝试Ivonna(http://ivonna.biz)进行MVC测试 - 不测试您的客户端,但可以测试您的Asp.Net服务器端代码。

但首先你应该问自己(或你的管理层)一个问题:我想测试什么?客户端/服务器端验证?你的服务?行动方法?

答案 4 :(得分:1)

开发人员很多人反对自动化UI的测试。我多年前做的是使用“Selenium Core”这允许我修复在Firefox中进行测试,然后保存为C#,然后混合使用C#和Html文件,我可以在其中执行以下操作。

  1. 忘记密码 - 输入数据库中的自动随机用户名,然后加密密码通过电子邮件发送到我设置的各种gmail帐户,我有C#API登录gmail并检索新的重置密码,然后重定向并拥有应用程序输入新密码,我可以将它放在CI服务器Hudson上,并整天自动执行此测试,并记录成功和错误等...

  2. 新注册...类似于#1

  3. 因此,对于您的UI测试,我们可以调用Functional或UAT测试... 然后对于真正的单元测试,这是针对NUnit / Xunit,MSTest等......,然后是MOQ等......可以提供帮助。 集成测试真正用连接系统测试整个应用程序......比如文件系统或WCF或数据库,而不是“模拟”

    他们都有自己的优点和缺点,但没有一个是完美的,但大多数人最终都说单位测试是最有利可图的。