我正在尝试使用spyProcedure,但它没有按预期工作。 以下是场景,请帮助我在哪里做什么?
**CREATE PROC [dbo].[proc3](@id int , @marks int out)
as
begin
select @marks = marks from student where id=@id;
end**
CREATE PROC [dbo].[proc4](@id int , @marks int )
as
begin
print 'inside proc4 id ' + cast(@id as varchar) + ' marks ' + cast(@marks as varchar);
update student set marks = @marks where id=@id;
end
**CREATE PROC [dbo].[proc6](@id1 int , @id2 int)
as
begin
declare @marks int;
EXEC tSQLt.SpyProcedure 'proc3' , 'SET @marks = 80';
set @marks = @marks + 20;
print ' marks = ' + cast(@marks as varchar);
EXEC proc4 @id = @id2 , @marks = @marks;
end**
EXEC proc6 @id1 = 1 , @id2 = 2;
GO
当我打电话给上面的时候,它无法执行/调用" EXEC proc4 @id = @ id2,@ marks = @marks;"但是当我评论" EXEC tSQLt.SpyProcedure' proc3' ,' SET @marks = 80&#39 ;; "然后就可以执行了。
你能帮我解决我在哪里做错了以及如何正确执行它。
谢谢。
答案 0 :(得分:3)
我认为你没有完全掌握如何使用上面代码示例中的tSQLt。
要开始运行基本的tSQLt测试,您需要做一些事情。
所有测试都必须在测试类中。
EXEC tSQLt.NewTestClass'MyTestClass' GO
所有测试必须以关键字'test'开头
CREATE PROCEDURE [MyTestClass]。[test_MyFirstTest] 如 开始 EXEC tSQLt.AssertEquals 1,1,'1实际上等于1' END
要运行测试,您需要使用tSQLt测试运行器
进行测试EXEC tSQLt.Run'[MyTestClass]。[test_MyFirstTest]'
使用SpyProcdure是一项高级功能,只有在您清楚了解基础知识后才能尝试使用。如果您有使用TDD和模拟框架的经验,那么让SpyProcedure工作不应该是一个巨大的飞跃。 如果您觉得自己对基础知识感到满意,首先尝试使用SpyProcedure来记录使用SpyProcedureLog调用过程中的间谍参数(请参阅tSQLt.org上的文档),然后尝试返回结果集。您在上面的示例中尝试的内容(传递变量中的值)与使用tSQLt一样困难。