我觉得我陷入了这场政治/宗教之战。从我所做的研究中我发现许多人非常强烈地相信UI测试通过单元测试是愚蠢的,并且是一个真实的人做得更好。我同意。
然而,似乎高层人士告诉我对UI进行单元测试。 (这已经很奇怪,因为他们之前告诉我,我只需要写一个测试计划而不是实际测试)。我真诚地对单元测试不是很熟悉。我正在尝试使用MOQ,但我找到的所有教程都使用存储库而不是服务,我正在构建围绕服务的Web应用程序。
这里的一个例子是服务的一部分:
public class ProductService : Service<Product, EntitiesDbContext>
{
...
public Product GetProduct(int id)
{
return All().FirstOrDefault(p => p.ProductId == id);
}
...
}
我的假设是我需要创建一个使用Moq的新产品,然后有人使用我的模型验证硬编码输入。我不知道该怎么做。
测试用户界面是我工作的主要部分,因为网站在很大程度上依赖于通过表单的用户输入。我再次发现使用单元测试进行测试非常愚蠢,因为我的模型非常严格,只允许某些输入。
我的问题: 我如何使用MOQ或可能的其他测试框架来测试表单输入? 我听说有些程序可以追踪你的行为,然后复制它们,但我找不到它们也没有成功,我也相信这样的技术会花钱。
答案 0 :(得分:2)
答案 1 :(得分:1)
Visual Studio 2010 Ultimate具有称为编码UI测试的功能。基本上,您在Internet Explorer中记录您的操作,转换为添加断言的C#代码,然后您在不同的浏览器中重放操作。
但是,对数据库支持的Web应用程序进行测试非常困难,因为您很难弄清楚哪个是新添加的行。为简化问题,您可能需要设置一个示例数据库,该数据库将在按顺序运行测试套件之前重置为其初始状态。
查看有关如何使用编码UI测试的各种TechEd视频。例如。 http://www.youtube.com/watch?v=rZ8Q5EJ2bQM
答案 2 :(得分:1)
您是在测试UI的操作,还是在测试实际UI。
如果您正在测试操作以及他们发送给视图的数据,那么使用NUnit,xUnit等内容进行单元测试,并使用moq框架,如MOQ或Rhino Mocks是正确的做法。
如果您正在测试Actual UI(Web服务器返回的HTML),那么使用像Selenium这样的自动化测试框架将是正确的工具
答案 3 :(得分:1)
您也可以尝试Ivonna(http://ivonna.biz)进行MVC测试 - 不测试您的客户端,但可以测试您的Asp.Net服务器端代码。
但首先你应该问自己(或你的管理层)一个问题:我想测试什么?客户端/服务器端验证?你的服务?行动方法?
答案 4 :(得分:1)
开发人员很多人反对自动化UI的测试。我多年前做的是使用“Selenium Core”这允许我修复在Firefox中进行测试,然后保存为C#,然后混合使用C#和Html文件,我可以在其中执行以下操作。
忘记密码 - 输入数据库中的自动随机用户名,然后加密密码通过电子邮件发送到我设置的各种gmail帐户,我有C#API登录gmail并检索新的重置密码,然后重定向并拥有应用程序输入新密码,我可以将它放在CI服务器Hudson上,并整天自动执行此测试,并记录成功和错误等...
新注册...类似于#1
因此,对于您的UI测试,我们可以调用Functional或UAT测试... 然后对于真正的单元测试,这是针对NUnit / Xunit,MSTest等......,然后是MOQ等......可以提供帮助。 集成测试真正用连接系统测试整个应用程序......比如文件系统或WCF或数据库,而不是“模拟”
他们都有自己的优点和缺点,但没有一个是完美的,但大多数人最终都说单位测试是最有利可图的。