2

我觉得我陷入了这场政治/宗教斗争。从我所做的研究中,我发现很多人非常坚信通过单元测试来进行 UI 测试是愚蠢的,而由一个真实的人来做的事情要好得多。我同意。

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

例如,这里是服务的(一部分):

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

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

测试 UI 是我的大部分工作,因为该网站严重依赖用户通过表单输入。我再次发现使用单元测试进行测试非常愚蠢,因为我的模型非常严格并且只允许某些输入。

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

4

5 回答 5

2

尝试使用SeleniumWatin进行 UI 测试。

于 2012-05-03T16:32:33.523 回答
1

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

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

于 2012-05-03T17:48:01.563 回答
1

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

如果您正在测试 Actions 以及它们发送到视图的数据,那么使用NUnitxUnit等进行单元测试并使用MOQRhino Mocks等 moq 框架将是正确的做法。

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

于 2012-05-03T16:43:37.927 回答
1

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

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

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

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

它们各有优缺点,没有一个是完美的,但大多数人最终都说单元测试是最划算的。

于 2012-05-03T23:44:19.610 回答
1

Visual Studio 2010 Ultimate 有一个叫做 Coded UI 测试的东西。基本上,您在 Internet Explorer 中记录您的操作,这些操作将转换为您添加断言的 C# 代码,然后您在不同的浏览器中重放这些操作。

但是,很难针对数据库支持的 Web 应用程序进行测试,因为您几乎无法确定哪一行是新添加的行。为了简化问题,您可能需要设置一个示例数据库,在按顺序运行您的测试套件之前将其重置为其初始状态。

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

于 2012-05-03T16:34:10.823 回答