Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Sql server 什么';这是创建';扔掉';SQL Server数据库?_Sql Server - Fatal编程技术网

Sql server 什么';这是创建';扔掉';SQL Server数据库?

Sql server 什么';这是创建';扔掉';SQL Server数据库?,sql-server,Sql Server,对于我的验收测试,他们要做的第一件事是在特定于测试的SQL Server数据库中创建一组表,以便验收测试可以在干净的数据库上运行。每个测试完成后,将删除所有新创建的表 然而,这开始变得缓慢。每次测试大约需要15秒,我有很多测试(我希望这个数字会继续上升)。大部分时间都被数据库设置和拆卸占用 有没有更快的办法?如果我能在内存中创建一个新的SQL Server数据库,这样它就不会碰到磁盘,我可以在测试结束时扔掉它——那太好了。但鉴于这不是一个真正的选择,有没有办法让我接近这一点 我不确定您在SQL

对于我的验收测试,他们要做的第一件事是在特定于测试的SQL Server数据库中创建一组表,以便验收测试可以在干净的数据库上运行。每个测试完成后,将删除所有新创建的表

然而,这开始变得缓慢。每次测试大约需要15秒,我有很多测试(我希望这个数字会继续上升)。大部分时间都被数据库设置和拆卸占用


有没有更快的办法?如果我能在内存中创建一个新的SQL Server数据库,这样它就不会碰到磁盘,我可以在测试结束时扔掉它——那太好了。但鉴于这不是一个真正的选择,有没有办法让我接近这一点

我不确定您在SQL Server中使用的功能,但我相信如果它支持您使用的所有功能,它可能会很有用

我花了一段时间寻找进行数据库单元测试的最佳方法,几年前,我提出了一个附加SQL Server的解决方案,但这既耗时又笨重

在最近的一个项目中,我开始在一个使用ORM(nhibernate)的项目中使用SQlite,但由于需要存储过程,我不得不放弃它


更新 将告诉您是否可以使用SQL Server CE


它非常有限,所以不太可能用于所有测试。无论如何,我认为SQL server支持游标。废弃表格内容的最简单方法是
删除表格
,或者
截断表格
,如果您只是想清空它。

因为它们是验收测试,而不是单元测试,我可能会尝试构造它们,以便每个后续测试都是独立的(关于数据)或者建立在以前测试的数据之上,测试以确定的顺序运行。这样,您可以一次性构建数据库,并在所有测试完成后将其清理。对于单元测试,我当然会考虑模拟数据库层,这样您的测试就不会触及实际的数据库。

您已经在管理完整数据库DDL的版本控制中的一个或多个脚本,以便您可以创建一个新的数据库,对吗?:)如果没有,请先这样做。这不仅仅是测试,它还会带来回报


现在,您已经在版本控制中维护了脚本,只需在实际运行测试套件之前,使用首选脚本环境动态创建数据库,并用所需的测试数据填充它。如果你在.NET上,你可以使用NANT或类似的东西。在Java世界中,使用Maven或Ant(或Maven和Ant)。如果您使用的是Rails,请尝试使用Capistrano或Ruby脚本。换句话说,这要看情况而定。不管怎样,主要的事情是创建数据库创建脚本,维护它们,并使用它们按需构建测试数据库,完成后(或重新运行脚本时)将其拆下。

使用模拟或存根数据库?我使用模拟进行一些单元测试,但我希望验收测试能够与某种真正的数据库进行对话。这可能是一个很大的“如果”,不是吗?好吧,如果您的项目是域驱动的(而不是数据驱动的),并且您使用ORM并使用数据库作为存储库,那么您就不需要完整的数据库。是的,我检查过了,似乎比我想象的要少很多。甚至不按订购!我想这可能只是指按列顺序排序,而不是按命名列排序?我想OP可以试试看。