我一直在尽力遵循http://www.sommarskog.se/share_data.html和 tSQLt 文档中的智慧;试图保持我的存储过程轻巧且相对不复杂,以便它们易于测试。因此,我发现自己在主存储过程中创建了一个临时表,然后在从主存储过程调用的“辅助”存储过程中对该临时表进行操作。这工作得很好,但事实证明测试起来有点尴尬。
在单独测试“辅助”存储过程时,临时表必须已经存在。看起来在[Set Up]
过程中创建临时表不会持续到单元测试,但创建一个完整的表会。
因此,为了避免CREATE TABLE #temp
在每个单元测试中重复(及其完整的列定义),我正在做以下的变体:
EXEC tSQLt.NewTestClass 'SEtest';
GO
CREATE PROCEDURE [SEtest].[SetUp]
AS
BEGIN
CREATE TABLE SEtest.temptemplate (col1 int);
END;
GO
CREATE PROCEDURE [SEtest].[test example]
AS
BEGIN
-- Assemble
SELECT TOP (0) * INTO #temp FROM SEtest.temptemplate;
INSERT INTO #temp (col1)
VALUES (1),(2),(5),(7);
-- Act
EXEC dbo.REMOVE_EVEN_NUMBERS;
-- Assert
SELECT TOP (0) * INTO #expected FROM #temp;
INSERT INTO #expected (col1)
VALUES (1),(5),(7);
EXEC tSQLt.AssertEqualsTable '#expected', '#temp';
END;
GO
有没有更好的方法来协调 tSQLt 与通过临时表在存储过程之间共享数据?