数据库单元测试问题疑难解答

更新:2007 年 11 月

当您对数据库执行单元测试时,可能会遇到本主题中的问题:

  • 运行单元测试或生成测试数据时权限不足

  • 对带编号的存储过程执行单元测试时出现的问题

  • 单元测试和运行单元测试时忽略的 App.Config 更改

  • 运行单元测试时到意外目标的数据库部署

  • 运行数据库单元测试时出现超时

运行单元测试或生成测试数据时权限不足

可以将单元测试配置为自动部署数据库和生成数据。如果您没有足够的权限将数据生成到目标数据库,则可能会收到一个错误,指出您的权限不足,无法连接到数据库。

说明:

若要解决此问题,请手动运行数据生成计划。如果您没有足够的权限生成数据,则此方法将提供一则更详细的错误消息,以帮助您解决该问题。

对带编号的存储过程执行单元测试时出现的问题

如果为包含带编号的存储过程(如 MyProcedure;2)的数据库创建数据库单元测试,则“创建单元测试”对话框将不显示所指定的编号。如果有一个或多个存储过程存在多个带编号的版本,那么,此行为可能会导致同一个存储过程名称出现多次。

此外,所生成的用来测试这些存储过程的脚本中会缺少所指定的编号。例如,如果为名为 MyProcedure;2 的过程生成一个单元测试,则该脚本将与以下内容相似:

EXEC @RC = [dbo].[MyProcedure]
说明:

若要解决此问题,请修改所生成的脚本,重新向其中加入指定的编号,然后再运行单元测试。如果为多个带编号的存储过程生成了单元测试,则将需要更正每个测试。

单元测试和运行单元测试时忽略的 App.Config 更改

如果您在测试项目中修改了 App.Config 文件,则必须重新生成测试项目才能使所做的更改生效。这些更改包括您使用“项目配置”对话框对 App.Config 进行的更改。如果不重新生成测试项目,则当您运行单元测试时将不会应用这些更改。

运行单元测试时到意外目标的数据库部署

如果在执行单元测试时部署数据库,则将使用单元测试配置中指定的连接字符串信息来创建数据库。数据库项目生成属性中指定的连接信息不会用于此任务,因此您可以针对同一个数据库的不同实例来运行不同的单元测试。

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

如果数据库单元测试由于超时而失败,则可通过更新数据库项目中的 app.config 文件来增加超时时间。连接字符串中的超时指定单元测试在连接到服务器时需要等待多长时间。命令超时指定单元测试在执行 Transact-SQL (T-SQL) 脚本时需要等待的时间。

说明:

若要解决此问题,请在测试项目的 app.config 文件中的相应 Context 元素中为 CommandTimeout 属性指定较大的值。例如,若要为 PrivilegedContext 元素指定命令超时为 120 秒,请将 app.config 更新为:

<DatabaseUnitTesting>
    <DatabaseDeployment DatabaseProjectFileName="test.dbproj" Configuration="Debug" />
    <DataGeneration DataGenerationFileName="test.dgen" ClearDatabase="true" />
    <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="another connection string" />
    <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="test" CommandTimeout=”120” />
</DatabaseUnitTesting>

请参见

任务

如何:为函数、触发器和存储过程创建数据库单元测试

如何:配置数据库单元测试执行

概念

Database Edition 术语概述