Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Selenium和ASPX.net,如何将模拟传递给codebehind?_Asp.net_Selenium_Mocking_Moq_Code Behind - Fatal编程技术网

Asp.net 使用Selenium和ASPX.net,如何将模拟传递给codebehind?

Asp.net 使用Selenium和ASPX.net,如何将模拟传递给codebehind?,asp.net,selenium,mocking,moq,code-behind,Asp.net,Selenium,Mocking,Moq,Code Behind,我正在对本地IIS运行Selenium,以提供页面服务并验证应用程序行为。我想在一些测试中模拟数据库。我已经使用了一个接口“proxy”,所以我想用一个Mock来替换我的实现,所以我只能验证调用逻辑层时使用的参数。有人能推荐一本关于这个主题的不错的资源/教程/书籍吗 场景:正在页面加载()中填充下拉列表。没有对Page.IsPostBack进行测试,因此它总是被重置,即使在用户提交表单之后(以及在事件处理程序之前)。我正在编写一个回归测试,以证明提交的值实际上已传递到提供程序-->存储库(并通过

我正在对本地IIS运行Selenium,以提供页面服务并验证应用程序行为。我想在一些测试中模拟数据库。我已经使用了一个接口“proxy”,所以我想用一个Mock来替换我的实现,所以我只能验证调用逻辑层时使用的参数。有人能推荐一本关于这个主题的不错的资源/教程/书籍吗

场景:正在
页面加载()
中填充下拉列表。没有对
Page.IsPostBack
进行测试,因此它总是被重置,即使在用户提交表单之后(以及在事件处理程序之前)。我正在编写一个回归测试,以证明提交的值实际上已传递到提供程序-->存储库(并通过扩展-->数据库

谢谢

背景

通常,Moq在单元测试期间使用(即,测试中的单个类或系统层),而Selenium意味着浏览器自动化测试,您的Selenium单元测试将超出您的Web表单的过程。模拟的一个主要好处是,它提供了在被测系统上进行验证/监视的能力,这通常需要对要测试的类进行进程内实例化,并直接注入模拟的依赖项—如果进程用完,这将丢失(使用Se进行测试时,您希望在部署状态下测试应用程序)

IMO WebForms页面并不真正有助于使用Moq进行此类单元测试,因为:

  • 考虑到大量的环境依赖性,很难直接和独立地创建
    WebForm
    ,例如,需要模拟页面生命周期,并提供
    HttpContext
    会话
  • System.Web.Page
    不是为构造函数或Setter注入而设计的
然而,尽管如此,仍有希望:

  • 可以应用一个改进来获得一个使用WebForms的好机会
  • 虽然在进程用完时,您将丢失
    Moq
    的验证功能,但您仍然可以使用Moq存根您的依赖项,并将虚假数据返回到Web表单(例如,
    IRepository
    依赖项的存根)。但是,为了执行验证,您需要找到另一种机制来记录对依赖项的调用,例如,通过记录到文件系统或数据库(或以某种方式将Moq重新整理到Se单元测试)
所以这里有一个想法:

  • 确保WebForms对存储库依赖项的访问通过接口解耦,然后使用服务定位器(1)获取存储库依赖项的实例,供WebForm使用(大多数IoC容器同时支持DI和服务定位器,例如Unity)
  • 将引导配置(例如Unity RegisterInstance/RegisterType)移动到配置(2)中。这样,您就可以替换出实际的存储库,而无需编辑IoC引导代码,例如在
    Global.asax
    中在真实存储库和假存储库之间切换
  • 在单独的程序集中创建存根/模拟存储库(如果使用Moq,可能需要向IoC提供一个工厂来创建Moq,并返回
    Mock.Object
    ),该工厂将记录每个调用、参数和时间戳,并将其发送到数据库
  • 将此程序集复制到您的Dev web服务器,并编辑IoC配置以重定向
    IRepository
    界面以指向您的伪存储库
  • 进行Selenium测试。在每个操作之后,您需要查询验证数据库以断言正确的调用数。您还需要在每个测试之前/之后进行清理
(1) 然而,在大多数情况下,依赖注入应该优先于服务定位器 (2) 同样,这不是最佳实践,因为编译时安全性可能会丢失。然而,IoC通常有一个“验证”配置机制,它至少可以部分补偿这一点

您可以考虑将演示文稿层从WebFrm上移至ASP.NET MVC,其中依赖注入和单元测试是第一类公民,而MOQ验证是可访问的;