TSQLT数据库单元测试



我第一次尝试使用TSQLT单元测试框架时遇到了一个问题。我有一个像这样的存储过程,它返回一些数字

Use Mydatabase
Declare @parameter1, @parameter2,@paramter3
BEGIN
SELECT @parameter1 = dbo.[function](@paramter2,parameter3)
..
..
-- Now some Dynamic SQL joins on two tables
BEGIN
SET @SQL = 'SELECT COLUMN1, COLUMN2 FROM  FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.COLUMN1 = 
TABLE2.COLUMN2 WHERE TABLE2.COLUMN3 = + CAST(@parameter1 as varchar(10))
EXECUTE sp_executesql @SQL, Output parameter
return

问题是表1和表2每天都在更新,我无法断言正在变化的值,所以我遇到了假表和间谍程序,

  1. 有没有办法利用spypprocedures来使用faketables而不是原始表
  2. 由于我的实际数据库和单元测试数据库不同,但连接相同,当我作为出现错误时,我如何将实际数据库引用到测试数据库

    无法在[WD0000\server]上使用SpyProcedure。[数据库]。[dbo]。[usp.mystoredproc],因为该过程不存在

TSQLT代码

EXEC tSQLt.NewTestClass 'SegmentSizeTest'
GO
CREATE PROCEDURE SegmentSizeTest.[test that checks the segment size]
AS
BEGIN
DECLARE @return_value int,@TotalCount int,@OneCount int,@TwoCount int
declare @Criteria Varchar(MAX)
declare @rampUpFactor int
declare @expected int
declare @actual int

SET @Criteria = 'My Criteria'
SET @GeoflexCriteria = NULL
--@TotalCount = @TotalCount OUTPUT
--@OneCount = @OneCount OUTPUT
--  @TwoCount = @TwoCount OUTPUT
SET @rampUpFactor = 1
set @expected = 160486
------Fake Table
EXEC tSQLt.FakeTable 'UnitTest.Household';
EXEC tSQLT.FakeTable 'UnitTest.Customer';
--
..Insert to UnitTest.Household and UnitTest.Customer tables
------Execution
EXEC    @return_value = [VAReportingDB].[dbo].[GetSegmentSize] 
@Criteria = @Criteria,
@TotalCount = @TotalCount OUTPUT,
@OneCount = @OneCount OUTPUT,
@TwoCount = @TwoCount OUTPUT
SELECT  @TotalCount as N'@TotalCount',
@OneCount as N'@OneCount',
@TwoCount as N'@TwoCount'
------Assertion
EXEC tSQLt.AssertEquals @expected, @TotalCount;
END;
GO

FakeTable用测试替身替换原始表。因此,任何为访问原始表而编写的代码,无论是动态的还是其他的,都将在测试期间"看到"伪造的表。

独立地,您应该将@parameter1传递给sp_executesql,而不是将其连接到Sql语句中。至少如果你的原始代码与你在这里发布的代码相似。

相关内容

  • 没有找到相关文章

最新更新