我第一次尝试使用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每天都在更新,我无法断言正在变化的值,所以我遇到了假表和间谍程序,
- 有没有办法利用spypprocedures来使用faketables而不是原始表
由于我的实际数据库和单元测试数据库不同,但连接相同,当我作为出现错误时,我如何将实际数据库引用到测试数据库
无法在[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语句中。至少如果你的原始代码与你在这里发布的代码相似。