问题标签 [tsqlt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2302 浏览

sql - 将数据插入 tSQLt faketable 的最佳方法?

我对 tSQLt 数据库单元测试框架很陌生。我有一个使用 3 个表的存储过程。每个表需要 15 行数据。我还需要另一个假表来验证结果。但是使用 INSERT 准备假表容易出错且难以维护。

为 tSQLt faketable 准备数据的最佳实践是什么?

谢谢。

0 投票
2 回答
1445 浏览

sql-server - tSQLt:在 SetUp 和测试之间共享数据

我正在使用 tSQLt 对 t-sql 代码进行单元测试。

很多时候,测试的安排部分非常广泛,我试图将其中的大部分内容推送到设置过程中,以便在类内的测试中重用。

如果设置和测试程序可以“知道”相同的信息,即有一些共享数据,那将非常有用。例如,假设 setup 创建了一张测试发票并将发票 ID 设置为已知的值:

然后在测试中我们要对测试发票做一些事情,像这样:

只需将 @TestId 的值推入 SetUp 过程中的某个“类变量”中,然后在测试中使用它,就能够在两个(以及更多)过程中替换重复的 @TestId 值,这将是一件好事。任何想法如何以紧凑的方式实现它?我可以想象在 [InvoiceManager] 模式中创建一个表并在测试中读取它。任何可能存在这样的事情只是我在文档中找不到它?谢谢!

0 投票
2 回答
2050 浏览

sql - 如何在 StoredProcedure 中模拟/伪造 RaiseError

这是我的第一天,tsqlt所以你可以期待一些模糊的陈述。

我正在尝试测试一个storedProcedure,它有一个Try Catch Block但测试中的实际语句是插入和更新命令。

现在我想测试如果出现 ErrorRaised,我的 catch 块是否执行预期的任务。

您能否指导我如何在测试中从存储过程中引发错误,其中我们没有任何东西可以模拟/伪造。

希望我的问题是可以理解的,如果需要,很高兴澄清。

0 投票
1 回答
887 浏览

sql-server - tsqlt - 不使用非聚集列存储索引

我正在尝试对涉及非聚集列存储表的过程创建单元测试。

我创建了一个假表,然后在插入测试数据之前尝试同时删除和禁用 CStore 索引,但是当我尝试运行测试时,它总是错误提示“INSERT 语句失败,因为无法在具有非聚集列存储的表中更新数据索引。考虑在发出 INSERT 语句之前禁用列存储索引,然后在 INSERT 完成后重建列存储索引“

这是 tsqlt 过程中相关的代码片段

0 投票
2 回答
1628 浏览

sql - 还有一个 ROLLBACK ERROR 和 tSQLt.ExpectException

这是场景:

  1. 存储过程sproc_a调用sproc_b。然后sproc_b调用sproc_c。典型的嵌套过程。
  2. Sproc_a 执行了 SET XACT_ABORT ON;并使用命名事务。
  3. Sproc_c 引发错误。
  4. tSQLt.ExpectException 未能确认错误。测试应该成功,但失败了。

下面是复制场景的代码。

当我删除 SET XACT_ABORT ON 时,单元测试是成功的,但它会出现错误:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.

这更像是一个错误报告。好吧,我想也许问题是:有谁知道如何解决它?:)

0 投票
1 回答
574 浏览

sql-server - tSQLt 简单的 SELECT 语句 - 我需要什么测试?最佳实践

这是一个关于 tSQLt / SQL 测试最佳实践的问题。

假设我有一个存储过程,它返回一个简单的 SELECT 语句的结果,例如

我正在考虑要写什么 tSQLt 测试。最明显的测试是我在两个表中都有记录(具有匹配的 ID)并且该过程返回正确的数据。

那个测试够吗?可能不会,因为有人可以将 INNER JOIN 更改为 LEFT JOIN,测试仍然可以通过,但是存储过程的行为现在已经改变。

因此,我是否应该测试 TableA 或 TableB 何时为空,或者两个表都为空,是否不返回任何记录?虽然我认为这更完整,但对我来说这听起来有点矫枉过正,并且可能导致对具有 5 个或更多表的 SELECT 语句进行大量测试。

我会欣赏社区的想法。

谢谢,

0 投票
1 回答
269 浏览

tsqlt - TSQLT 中的 AssertResultSetsHaveSameMetaData

我正在使用 TSQLT AssertResultSetsHaveSameMetaData 来比较两个表之间的元数据。但问题是我无法硬编码表名,因为我在运行时将表名作为参数传递。所以有什么办法可以做到这一点

0 投票
0 回答
304 浏览

sql - 我们如何在 tSQLt 单元测试中使用 SQL 提示进行锻炼?

我一直在尝试使用 tSQLt 为我的数据库中的一个存储过程创建单元测试并面临一个问题,

由于此查询中定义的提示,查询处理器无法生成查询计划。在不指定任何提示且不使用 SET FORCEPLAN.[16,1]{spPlaceNewOrder,56} 的情况下重新提交查询(还有 ROLLBACK ERROR --> 当前事务无法提交,也无法回滚到保存点。回滚整个事务。{Private_RunTest,161})

有人可以帮我吗?

0 投票
1 回答
227 浏览

tsqlt - 如何使用 tSQLt 测试内存优化表?

目前,当我尝试使用tSQLt对存储过程进行单元测试时,如果我的测试涉及内存优化表,我会收到以下错误:

我在 wiki 或在线其他地方找不到任何文档,这些文档显示了 In Memory 表与tSQLt的用法,或者解决此问题的方法。

有什么想法或建议吗?

0 投票
1 回答
1074 浏览

tsql - 如何使用 tSQLt 测试更新表(相对于返回结果集)的 TSQL 存储过程

tSQLt 专家能否介绍测试一种不返回任何内容但在表中执行字段更新的存储过程的方法?我了解如何测试从函数或 SP返回的结果,但是在就地更新的情况下,如果过程具有硬编码的表名,我如何使测试针对假表与实际表运行? 我能想到的唯一办法就是让整个SP使用动态SQL,并把表名作为参数传进去,但是这样会让代码的可读性降低,更脆。有没有更好的办法?下面是一个简单的存储过程,它查看 2 个其他字段:TransactionDate 和 ENdOfDropDate,并根据条件的结果将同一个表中名为“IsWithinAddDrop”的第三个字段设置为 True 或 False。

结果是我要测试的表中更新的 IsWithinAddDrop 列:

谢谢!