如何解决tSQLt.FakeTable报错Msg 50000:请在单元测试内运行
Msg 50000, Level 17, State 2, Procedure tSQLt.FakeTable, Line 13 [Batch Start Line 0]
Please run this inside a unit test
报错解决方案
触发原因
该报错是tSQLt的内置规则限制:tSQLt.FakeTable、tSQLt.SpyProcedure等模拟类工具方法,仅允许在tSQLt框架管理的测试存储过程内部执行,直接在普通查询窗口、业务存储过程或其他非测试上下文调用都会触发该报错。
正确使用流程
- 第一步:创建专属测试类(已创建可跳过)
EXEC tSQLt.NewTestClass 'TestYourModuleName';
- 第二步:在测试类下编写测试存储过程,把
FakeTable调用放在存储过程内部
CREATE PROCEDURE TestYourModuleName.[Test 待验证的业务逻辑名称] AS BEGIN -- 此处调用FakeTable符合框架运行要求 EXEC tSQLt.FakeTable 'dbo.你要模拟的业务表名'; -- 后续补充测试数据准备、业务逻辑调用、结果断言等测试逻辑 END
- 第三步:执行测试验证逻辑
-- 运行单个测试类下的所有测试 EXEC tSQLt.Run 'TestYourModuleName'; -- 也可以指定运行单个测试存储过程 EXEC tSQLt.Run 'TestYourModuleName.[Test 待验证的业务逻辑名称]';
按以上流程执行即可解决该报错。
tSQLt学习建议
- 入门阶段:优先掌握核心基础概念,包括测试类创建规则、测试存储过程命名规范、
FakeTable、各类断言方法等核心API的使用场景,先实现单表增删改、简单业务逻辑的单元测试用例编写。 - 进阶阶段:学习存储过程模拟、触发器测试、事务逻辑测试、测试用例分组与批量运行的方法,覆盖复杂多表关联、跨模块调用的业务场景测试需求。
- 落地阶段:学习tSQLt测试与CI/CD流水线的集成方法,实现代码提交时自动触发全量测试,提前拦截逻辑变更引发的问题。
内容的提问来源于stack exchange,提问作者ManojN
相关产品推荐
相关产品推荐

