我正在针对本地IIS运行Selenium来提供页面并验证应用程序行为。我想在一些测试中模拟数据库。我已经使用了接口" proxy",所以我想用Mock替换我的实现,所以我只能验证调用逻辑层时使用的参数。任何人都可以推荐一个关于这个主题的合适的资源/教程/书籍吗?
场景:Page_Load()
中填充了一个下拉列表。没有Page.IsPostBack
的测试,所以即使在用户提交表单之后(以及事件处理程序之前),它也总是被重置。我正在编写一个回归测试来证明提交的值实际上是传递给提供者 - >存储库(以及扩展程序 - >数据库)。
谢谢!
答案 0 :(得分:1)
背景
通常,在单元测试期间使用Moq(即测试中的单个类或系统层),而Selenium意味着浏览器自动化测试,而您的Selenium单元测试将不在WebForm的过程中。模拟的一个主要好处是它提供了验证/监视被测系统的能力,这通常需要在您要测试的类的进程内实例化,并直接注入模拟的依赖项--AFAIK这将丢失当用完程序时(使用Se进行测试时,您希望在部署状态下测试应用程序)。
从那以后,IMO WebForms页面并不真正有助于使用Moq进行这种单元测试:
WebForm
- 例如需要模拟页面生命周期,并提供HttpContext
,Session
等。System.Web.Page
不适用于Constructor或Setter injection 然而,那说,还有希望:
Moq
的验证功能,但你仍然可以使用Moq来存根你的依赖并将假数据返回给WebForm(例如你的IRepository
的存根依赖)。但是,为了执行验证,您需要找到另一种机制来记录您的依赖项的调用,例如通过记录到文件系统或数据库(或以某种方式将Moq编组回Se单元测试)。所以这是一个想法:
Global.asax
中切换真假存储库。mock.Object
),以及数据库的参数和时间戳。IRepository
接口以指向您的虚拟存储库。(1)但是,在大多数情况下,依赖注入应该优先于服务定位器 (2)同样,这不是最佳实践,因为编译时安全性可能会丢失。然而,IoC通常具有“验证”配置机制,该机制至少可以部分地补偿这一点。
或强>
您可以考虑将您的表示层从WebForms移到ASP.Net MVC上,其中依赖注入和单元测试是一等公民,并且可以访问Moq验证;)