带有输出参数的tSQLt SpyProcedure

带有输出参数的tSQLt SpyProcedure,tsqlt,Tsqlt,我试图用输出参数监视一个过程。此程序有两个参数,一个输入参数和一个输出参数 输入参数的默认值为NULL CREATE PROCEDURE spExampleProcedure @INPUTPARAM DATETIME = NULL, @OUTPUTPARAM INT = NULL OUTPUT AS .... 我正在尝试测试一个调用spExampleProcedure的过程。使用不同的@INPUTPARAM多次调用spExampleProcedure。我想检查param并根据输

我试图用输出参数监视一个过程。此程序有两个参数,一个输入参数和一个输出参数

输入参数的默认值为NULL

CREATE PROCEDURE spExampleProcedure
    @INPUTPARAM DATETIME = NULL,
    @OUTPUTPARAM INT = NULL OUTPUT
AS
....
我正在尝试测试一个调用spExampleProcedure的过程。使用不同的@INPUTPARAM多次调用spExampleProcedure。我想检查param并根据输入返回不同的值。(一种更高级的模拟。)

这是行不通的。我真的希望能够像处理函数一样伪造/监视一个过程,因为当一个存储过程被多次调用时,这将非常有用


我考虑过的一个选项是将spExampleProcedure转换为函数,但这只能避免我的问题。查看spy过程,我看不出我的安装程序不工作的原因,除了它创建的伪过程可能没有默认值null。

发布的示例应该如Sebastian Meine所指出的那样工作。我想详细解释一下为什么我的测试在帮助别人的情况下不起作用

我的问题与我的测试数据设置有关

考虑:

CREATE PROCEDURE spExampleProcedure
    @INPUTPARAM DATETIME = NULL,
    @OUTPUTPARAM INT = NULL OUTPUT
AS
....

测试程序:

CREATE PROCEDURE spExampleProcedureUnderTest
        @ID INT
    AS
    BEGIN

        DECLARE @EXAMPLEVAR DATETIME, @OUTPUT
        SELECT @EXAMPLEVAR = VAR FROM ExampleTable WHERE ID = @ID

        EXEC spExampleProcedure @OUTPUTPARAM = @OUTPUT OUTPUT
        EXEC spExampleProcedure @EXAMPLEVAR, @OUTPUT OUTPUT
        ...
我的测试过程是伪造ExampleTable,但没有为VAR输入值

EXEC tSQLt.FakeTable 'dbo.ExampleTable'
INSERT INTO ExampleTable (ID) VALUES (1)
EXEC tSQLt.SpyProcedure 'dbo.spExampleProcedure', 
        'SET @OUTPUTPARAM = CASE WHEN @INPUTPARAM IS NULL THEN 1 ELSE 2 END'
EXEC spExampleProvedureUnderTest 1
而不是

EXEC tSQLt.FakeTable 'dbo.ExampleTable'
INSERT INTO ExampleTable (ID, VAR) VALUES (1, '2018-06-01')
EXEC tSQLt.SpyProcedure 'dbo.spExampleProcedure', 
        'SET @OUTPUTPARAM = CASE WHEN @INPUTPARAM IS NULL THEN 1 ELSE 2 END'
EXEC spExampleProvedureUnderTest 1
重点放在每一行的第2行。请注意,我在insert中添加了一个值


实际上,我的间谍程序两次都被调用为NULL。注意来自伪造表格的数据。伪造的表删除了约束,因此很容易将空值放入本来不允许的表中。

tSQLt在监视过程时保留
OUTPUT
参数,并设置其值。这意味着,您遇到的问题可能在其他地方。你能发布你的整个测试用例吗?谢谢你的评论。我开始编译我的测试用例以提供给您,同时,我注意到了问题的根源。我的存储过程使用的是一个伪造的表,我没有向该表中插入值。因此,当调用过程时,该值为null。
EXEC tSQLt.FakeTable 'dbo.ExampleTable'
INSERT INTO ExampleTable (ID) VALUES (1)
EXEC tSQLt.SpyProcedure 'dbo.spExampleProcedure', 
        'SET @OUTPUTPARAM = CASE WHEN @INPUTPARAM IS NULL THEN 1 ELSE 2 END'
EXEC spExampleProvedureUnderTest 1
EXEC tSQLt.FakeTable 'dbo.ExampleTable'
INSERT INTO ExampleTable (ID, VAR) VALUES (1, '2018-06-01')
EXEC tSQLt.SpyProcedure 'dbo.spExampleProcedure', 
        'SET @OUTPUTPARAM = CASE WHEN @INPUTPARAM IS NULL THEN 1 ELSE 2 END'
EXEC spExampleProvedureUnderTest 1