0

我正在尝试使用 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';”时,它就可以被执行了。

你能帮我在哪里做错了以及如何正确执行它。

谢谢你。

4

1 回答 1

3

我认为您还没有从上面的代码示例中完全掌握如何使用 tSQLt。

要开始运行基本的 tSQLt 测试,您需要做一些事情。

  1. 所有测试都需要在测试类中。

    执行 tSQLt.NewTestClass 'MyTestClass' 去

  2. 所有测试必须以关键字“测试”开头

    CREATE PROCEDURE [MyTestClass].[test_MyFirstTest] AS BEGIN EXEC tSQLt.AssertEquals 1,1, '1 实际上等于 1' END

  3. 要运行测试,您可以使用 tSQLt 测试运行器

    执行 tSQLt.Run '[MyTestClass].[test_MyFirstTest]'

使用 SpyProcdure 是一项高级功能,只有在您清楚了解基础知识后才能尝试。如果您有 TDD 和模拟框架的经验,那么让 SpyProcedure 工作应该不是一个巨大的飞跃。如果您对基础知识感到满意,请先尝试使用 SpyProcedure 来记录使用 SpyProcedureLog 调用了监视过程的参数(请参阅 tSQLt.org 上的文档),然后尝试返回结果集。您在上面的示例中尝试的(在变量中传回一个值)与使用 tSQLt 所能获得的一样难。

于 2014-04-03T20:51:39.997 回答