tSQLt技术问询:如何检查表中数值是否按指定幅度变化?
在tSQLt中校验表间数值的幅度变化
首先明确一点:tSQLt.AssertEqualsTable 只能做精确的逐行逐列匹配,没办法直接校验数值的变化幅度(比如Balance差值在±100范围内)。不过你提到的用常规SQL逻辑实现的思路是完全可行的,而且我们可以把它和tSQLt的测试命令结合得更贴合框架用法。
具体实现步骤
- 第一步:关联两张表,计算Balance的差值,筛选出变化幅度超出±100的记录,存入临时表
- 第二步:用tSQLt的
AssertEmptyTable命令断言这个临时表为空——如果有记录,说明存在不符合要求的Balance变化,测试会直接失败
示例代码
CREATE PROCEDURE [TestBalanceValidation].[Test_BalanceChangesAreWithinAllowedRange] AS BEGIN -- 1. 筛选出Balance变化超出±100的账户 SELECT a.AccID, a.Balance AS OriginalBalance, b.Balance AS UpdatedBalance, ABS(a.Balance - b.Balance) AS BalanceChangeAmount INTO #UnacceptableChanges FROM TableA a INNER JOIN TableB b ON a.AccID = b.AccID WHERE ABS(a.Balance - b.Balance) > 100; -- 2. 断言没有不符合要求的记录 EXEC tSQLt.AssertEmptyTable '#UnacceptableChanges'; END;
额外说明
- 使用
AssertEmptyTable比自己判断记录数更符合tSQLt的测试风格,当测试失败时,它会自动返回临时表中的所有异常记录,帮你快速定位哪些账户的Balance变化超标 - 如果需要更自定义的失败提示,也可以先统计异常记录数,再用
tSQLt.AssertEquals断言记录数为0,比如:
DECLARE @InvalidCount INT; SELECT @InvalidCount = COUNT(*) FROM #UnacceptableChanges; EXEC tSQLt.AssertEquals 0, @InvalidCount, '存在Balance变化超出±100的账户';
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

