sql - 使用TSQLUNIT进行SQL单元测试: don't you need to duplicate your SQL code?

标签 sql sql-server unit-testing t-sql

我正在考虑为我的 Tsql 存储过程编写一些单元测试,我有两个问题:

  1. 我必须编写大量 SQL 来创建测试装置(在 _setup 过程中准备测试数据)

  2. 我必须在测试过程中“重写”我的查询以获得结果,以便与我正在测试的存储过程的结果进行比较。

考虑到我的数据库有数百个表和非常复杂的存储过程...我不明白这将如何节省我的时间?有什么想法吗?我错过了什么吗?还有其他路可走吗?

最佳答案

由于管理者插入快速发布而不是增加项目范围和预算以强调稳定性,因此自动化单元测试经常被抛在一边。事实上,单元测试需要时间。根据我的经验,好处远远超过缺点。在外部系统调用存储过程的情况下,单元测试对于消除不可预见的问题并保证集成测试之前的稳定性非常有值(value)。

关于您的疑虑:

  1. 如果您将单元测试存储过程所需的任何数据放入可在运行单元测试之前读取的 XML 文件中,则可以使用标准 API 例程来读取数据XML 数据并可能重复使用该数据进行多个测试。在测试结束时回滚的事务上下文中运行每个测试,以允许在测试运行开始时配置一次整体环境,而不必为每个单独的测试执行大量步骤。单元测试可以与自动化的夜间构建流程捆绑在一起,以进一步保护您的代码。

    最初会产生一些开销,但随着时间的推移,随着您和您的团队更加熟悉单元测试概念以及如何利用可重用性,这种开销会减少。

  2. 您不需要重新编写查询来比较结果。标准场景可能如下所示:

    1. 加载测试数据并准备环境
    2. 开始交易
    3. 使用测试数据运行存储过程
    4. 使用 Assert 语句将实际输出与预期输出进行比较
    5. 如果实际输出与预期输出不匹配,则测试失败
    6. 如果实际输出与预期输出匹配,则测试通过
    7. 回滚事务
      /...
      对于任何其他测试,请重复步骤 2 至 7
      .../
    8. 清理测试环境

    请记住,您正在测试一组特定的条件以查找通过/失败,因此可以在测试例程中对预期值进行硬编码。

希望这有帮助,

比尔

关于sql - 使用TSQLUNIT进行SQL单元测试: don't you need to duplicate your SQL code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/843114/

相关文章:

sql - MySQL 外键约束 - 整数列

sql - 无法将索引添加到持久计算列,因为它是 "of a type that is invalid for use as a key"

sql - SQL Server 2008 中截断/清除表变量

matlab - 并行运行 MATLAB 单元测试

java - 从 junit 中拦截 http 调用的最简单方法是什么?

SQL根据第二个表中的值列表从第一个表中选择

sql - 'taking it offline' 进程失败后数据库无法访问

c# - 将值从 API 插入数据库

sql - 向表中添加数字 id

ios - 访问 Objective-C 中单元测试的 Assets 目录