在存DBMS的单元测试
-
20-08-2019 - |
题
我正在寻找令人满意的选项,用于单元的测试我的。净DAL类;因为他们在达尔班,他们访问数据库直接使用ADO.NET.目前,我使用的一个实例MSSQL数据库的试验,但不知道什么更快的选择也有---由于单元的测试需要运行尽可能快地,一个在内存解决方案将是理想的。
我还应该提到,我已经绑自己TSQL因为我永远只会使用微软平台。
解决方案
这你陈述:
我还应该提到,我绑 自己TSQL因为我只有永远 将使用微软 平台。
然后使用SqlServer的精简版可以为您的需求很好地工作。 它不会完全在内存中操作,但可以在只读模式(其中,因此它可以由多个测试在使用一次没有编辑发生于主数据库文件)操作
有一些陷阱,没有存储的过程都支持,几个数据类型需要被翻译和某些数据类型有严格的限制(特别是VARCHAR只能去4000个字符)Sql的Linq还没有被正确支撑。
尽管如此我已经使用一个SQLServer精简版作为几乎完全下降更换为具有良好的结果正确的SQL Server数据库。
其他提示
我发现 SQLite的是最好的选择。虽然,我使用NHibernate的,但它是零配置,因此只需要一秒钟成立。虽然,你必须要知道的是,这些类型的发动机通常缺乏你可能需要一些东西(例如,SQLite的鼓起,当你在表名中的空格,如果您使用的是ADO提供商)
当然,@TopBanana是右约一些与未使用“实际的”数据库中的问题。然而,在内存中的RDBMS是您的最佳选择想要真正快速运行这些类型的测试(例如,对于增量或CI检查,在测试版本)。
在其他巨大的优势是,你不必担心安装或拆除。这是令人难以置信的非生产性有您的入住失败,因为开发一个打破你的开发数据库; - )
我会建议使用同一个数据库单元测试作为生产。你真的不需要一些奇怪的差异拍摄你的脚,当你正在调试的大问题。
如果你看看真正的大单元测试套件NHibernate的,你会看到它使用(基于磁盘)的SQL Server,并进行测试跑起来速度惊人。这更令人印象深刻考虑到有很多多个表创建/删除比一般的单元测试集,这是不是SQL Server在优化回事。
我听说有软件在Windows启动RAMDISK(不记得网址,抱歉)。
这可能是有趣的,上创建测试数据库。
是SQL服务器 真的 瓶颈对于你的单元的测试吗?
我的意思是:
- 你有没有分析单元测试(喜欢的东西SQL Profiler).他们都慢?一些缓慢?为什么?
- 是你的单元测试做的太多了?是的安装和拆卸码太重了?
- 如果SQL是你的瓶颈,你有没有考虑一个 嘲笑框架, 所以你模拟出你所有的SQL话。
我有类似的挑战与Oracle和我们做到如下:
确保我们有真正的单元的测试没有碰数据库,但是用来嘲笑的服务,而不是
标记DB试验,实际上需要Oracle与的试验,可能违HSQLDB或H2或任何其他在存储器数据库。因此,我们可以运行,它们分开。
与测试实际使用Oracle的特点,我们使用正常的Oracle instance跑上RAM盘。
这使得测试相当快。