Visual studio 2010 从默认项目复制目录
我不熟悉单元测试项目。我们目前正在使用NUnit,等待Resharper许可证的到来 因此,我正在修改单元测试项目的数据库标准化。问题是,以前的实现合并了一个SQL脚本文件,随着时间的推移,随着数据库模式随客户机请求的变化,该文件最终变得过时 我们使用它来保持数据库模式的最新。因此,我们需要做的是创建一个进程来复制包含所有模式文件的当前db文件夹,或者创建一种方法来导航到脚本文件夹,并在测试之前执行脚本文件Visual studio 2010 从默认项目复制目录,visual-studio-2010,unit-testing,Visual Studio 2010,Unit Testing,我不熟悉单元测试项目。我们目前正在使用NUnit,等待Resharper许可证的到来 因此,我正在修改单元测试项目的数据库标准化。问题是,以前的实现合并了一个SQL脚本文件,随着时间的推移,随着数据库模式随客户机请求的变化,该文件最终变得过时 我们使用它来保持数据库模式的最新。因此,我们需要做的是创建一个进程来复制包含所有模式文件的当前db文件夹,或者创建一种方法来导航到脚本文件夹,并在测试之前执行脚本文件 当前想法 将数据库脚本文件夹从启动项目复制到其生成上的测试文件夹 有一种从测试文件夹中
- 当前想法
- 将数据库脚本文件夹从启动项目复制到其生成上的测试文件夹
- 有一种从测试文件夹中引用db文件夹的方法
我正在使用
Microsoft.SqlServer.Management.Common
&Microsoft.SqlServer.Management.Smo
通过测试项目扩展SQL Server访问权限
protected virtual void BeforeTest()
{
...
using(var conn = (SqlConnection) CPLGlobal.GetConnection()) {
conn.Open();
var server = new Server(new ServerConnection(conn));
//Check if Database Exists, if so Delete the database
if(server.Databases.Contains("cplstore_int")) {
server.KillDatabase("cplstore_int");
}
//Create the database and obtain reference to it for processing.
server.Databases.Add(new Database(server , "cplstore_int"));
var db = server.Databases["cplstore_int"];
}
...
}
两点删除和创建db,对于定期运行单元测试来说太昂贵了,我只会对创建db的单元测试这样做,而且只有在强制的情况下才会这样做。单元测试是什么,如果是业务逻辑的话,那么你应该模拟数据库交互,或者编写代码,这样它就不关心持久性了。我们没有通过DBcontext向数据库中填充足够的实时数据来运行测试,而这几乎是不可能的。首先需要数据库符合模式,然后运行测试。但是,由于您可以单独运行任何测试,我想我可以验证数据库是否存在,然后检查要测试的表是否存在必需的字段,但仍然需要我保持至少3个模式的最新状态,而不仅仅是1个。我们这样做。我们有一个描述模式的xml文档,然后我们做一个与实际的比较作为“单元测试”。我们强制首先运行该测试,如果失败,则跳过假定数据库设置正确的所有其他测试。不完全是pukka,但效率很高。