排查 SQL Server 数据库单元测试问题

在数据库上使用 SQL Server 单元测试时,可能会遇到以下问题。

运行单元测试时,将忽略单元测试和 app.config 更改

如果修改 app.config 测试项目中的文件,则必须在更改生效之前重新生成测试项目。 这些更改包括通过SQL Server 测试配置对话框对 app.config 所做的任何更改。 如果不重新生成测试项目,则运行单元测试时不会应用更改。

在运行单元测试时,数据库被部署到非预期目标

如果在运行单元测试时从数据库项目部署数据库,将使用单元测试配置中指定的连接字符串信息部署数据库。 在数据库项目调试属性中指定的连接信息不用于此任务,这使你可以针对同一数据库的不同实例运行 SQL Server 单元测试。

运行数据库单元测试时超时

如果数据库单元测试因超时而失败,可以通过更新 app.config 测试项目中的文件来增加超时期限。 连接字符串上定义的连接超时指定在单元测试连接到服务器时等待的时间。 命令超时必须直接在app.config文件中定义,指定单元测试在执行Transact-SQL脚本时需要等待多长时间。 如果在长时间运行的单元测试时遇到问题,请尝试在适当的上下文元素中增加命令超时值。 例如,要为 PrivilegedContext 元素指定命令超时为 120 秒,更新 app.config 如下:

<SqlUnitTesting_VS2010>
    <DatabaseDeployment
        DatabaseProjectFileName="..\..\..\..\..\..\Visual Studio 2010\Projects\Database10\Database10\AdventureWorks.sqlproj"
        Configuration="Debug" />
    <DataGeneration ClearDatabase="true" />
    <ExecutionContext Provider="System.Data.SqlClient"
        ConnectionString="Data Source=(LocalDB)\Projects;Initial Catalog=AdventureWorks_Test;Integrated Security=True;Pooling=False"
        CommandTimeout="30" />
    <PrivilegedContext Provider="System.Data.SqlClient"
        ConnectionString="Data Source=(LocalDB)\Projects;Initial Catalog=AdventureWorks_Test;Integrated Security=True;Pooling=False"
        CommandTimeout="120" />
</SqlUnitTesting_VS2010>