在数据库单元测试中使用 Transact-SQL 断言
在数据库单元测试中,Transact-SQL 测试脚本运行并返回结果。 有时,结果将作为一个结果集返回。您可以使用测试条件来验证结果。 例如,可以使用测试条件检查特定结果集中返回的行数,或验证特定测试的运行时间。 有关测试条件的更多信息,请参见在数据库单元测试中使用测试条件。
除了使用测试条件外,还可以使用 Transact-SQL 断言,这些断言在 Transact-SQL 脚本中为 RAISERROR 语句。 在某些情况下,您可能更愿意使用 Transact-SQL 断言,而不是测试条件。
使用 Transact-SQL 断言
决定是使用 Transact-SQL 断言还是测试条件验证数据之前,应考虑以下几点。
性能。 与先将数据移到客户端计算机再进行本地操作相比,在服务器上运行 Transact-SQL 断言的速度要更快。
熟悉的语言。 根据您目前的专业知识,您可能更愿意使用特定的语言,并因此而选择 Transact-SQL 断言或者 C# 或 Visual Basic 测试条件。
复杂验证。 某些情况下,可以生成比仅使用 C# 或 Visual Basic 更复杂的测试验证,并在客户端上验证测试。
旧式验证库。 如果已有执行验证的代码,则可以将其用于数据库单元测试,而不使用测试条件。
标记具有预期异常的单元测试方法
若要用预期的异常标记数据库单元测试方法,请添加以下特性:
<ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)> _
[ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)]
其中:
nnnnn 是预期消息的编号,如 14025
x 是预期异常的严重级别
y 是预期异常的状态
忽略任何未指定的参数。 将这些参数传递给数据库代码中的 RAISERROR 语句。 如果将 MatchFirstError 指定为 true,则该特性将与异常中的任何 SqlError 匹配。 默认行为 (MatchFirstError = true) 是仅与发生的第一个错误匹配。
有关如何使用预期异常和否定性数据库单元测试的示例,请参见演练:创建和运行数据库单元测试。
RAISERROR 语句
通过在 Transact-SQL 脚本中使用 RAISERROR 语句,可以在服务器上直接使用 Transact-SQL 断言。 其语法为:
**RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)**
其中:
@ErrorMessage 是任何用户定义的错误消息。 可以使用与 printf_s 函数类似的方法设置此信息字符串的格式。
@ErrorSeverity 是用户定义的严重级别 (0 – 18)。
提示
严重级别值“0”和“10”不会导致数据库单元测试失败。 可以使用 0 - 18 范围内的任何其他值使测试失败。
@ErrorState 是 1 – 127 范围内的任意整数。 可以使用此整数区分代码中不同位置引发的单个错误的发生情况。
有关更多信息,请参见 Microsoft 网站上 SQL Server 联机丛书中的 RAISERROR (Transact-SQL)。 主题如何:编写在单个事务范围内运行的数据库单元测试中提供了在数据库单元测试中使用 RAISERROR 的示例。