You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用tSQLt测试整数值是否处于特定范围或符合预期百分比误差要求

tSQLt 实现整数误差范围校验的方案

核心说明

tSQLt官方没有内置AssertIntValueInRange类的区间断言方法,你提到的FailAssertion属于方法名记错,官方内置的自定义断言失败抛出方法为tSQLt.Fail,支持自定义拼接错误信息,基于该方法即可实现你的需求。

方案1:创建通用自定义断言(推荐,可复用)

一次创建后所有单元测试用例均可直接调用,符合tSQLt的扩展规范:

  • 首先创建自定义断言存储过程:
CREATE PROCEDURE tSQLt.AssertIntWithinErrorRate
    @ExpectedValue INT,
    @ActualValue INT,
    @AllowedErrorRate DECIMAL(5,3) -- 单位为%,允许0.1%误差则传入0.1
AS
BEGIN
    SET NOCOUNT ON;
    -- 计算允许的最大偏差绝对值
    DECLARE @AllowedDeviation DECIMAL(18,6) = ABS(@ExpectedValue * @AllowedErrorRate / 100.0);
    -- 计算实际偏差绝对值
    DECLARE @ActualDeviation DECIMAL(18,6) = ABS(@ActualValue - @ExpectedValue);

    IF @ActualDeviation > @AllowedDeviation
    BEGIN
        -- 调用tSQLt内置方法抛出断言失败,输出详细错误信息
        EXEC tSQLt.Fail 
            '预期值:', @ExpectedValue, 
            ',实际值:', @ActualValue, 
            ',实际偏差:', @ActualDeviation, 
            ',超出允许最大偏差:', @AllowedDeviation, 
            '(允许误差率:', @AllowedErrorRate, '%)';
    END
END
GO
  • 调用示例(校验行数误差不超过0.1%):
-- 获取实际表行数
DECLARE @ActualRowCount INT = (SELECT COUNT(*) FROM 待测试业务表);
-- 执行断言,预期行数为10000,允许误差0.1%
EXEC tSQLt.AssertIntWithinErrorRate 
    @ExpectedValue = 10000,
    @ActualValue = @ActualRowCount,
    @AllowedErrorRate = 0.1;

方案2:单测试用例临时实现(无需新增存储过程)

如果仅需要在单个用例中做校验,不需要复用逻辑,可以直接在测试用例中加入判断代码:

DECLARE @ExpectedRowCount INT = 10000;
DECLARE @ActualRowCount INT = (SELECT COUNT(*) FROM 待测试业务表);
DECLARE @AllowedErrorRate DECIMAL(5,3) = 0.1;

DECLARE @AllowedDeviation DECIMAL(18,6) = ABS(@ExpectedRowCount * @AllowedErrorRate / 100.0);
DECLARE @ActualDeviation DECIMAL(18,6) = ABS(@ActualRowCount - @ExpectedRowCount);

IF @ActualDeviation > @AllowedDeviation
BEGIN
    EXEC tSQLt.Fail '行数超出误差允许范围,预期:', @ExpectedRowCount, ',实际:', @ActualRowCount;
END

补充说明:如果需要支持非整数的数值校验,只需将存储过程的入参类型调整为DECIMAL/FLOAT即可,逻辑无需修改。

内容的提问来源于stack exchange,提问作者Eric B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:06:01