gpt4 book ai didi

sql - 将数据插入到 tSQLt faketable 的最佳方式?

转载 作者:行者123 更新时间:2023-12-01 09:55:26 26 4
gpt4 key购买 nike

我对 tSQLt 数据库单元测试框架还很陌生。我有一个使用 3 个表的存储过程。每个表需要 15 行数据。我还需要另一个假表来验证结果。但是使用 INSERT 准备假表容易出错且难以维护。

为 tSQLt faketable 准备数据的最佳做法是什么?

谢谢。

最佳答案

这是我在没有代码示例的情况下能想到的最佳答案:

FakeTable 的想法是在测试期间更简单地将测试数据插入到您的表中。它用不包含约束的副本替换表。这样您就可以仅将数据放在您尝试测试的存储过程、函数、 View 等使用的表中。

至此,由于 FakeTable 已经移除了约束,您也可以自由地将数据仅插入到您关心的表的列中。这意味着您的插入语句可以更短。

你说每个表需要15行数据。在编写单元测试时,我发现很少需要这么多数据来测试代码的特定部分。例如,如果我正在测试包含非常复杂的 select 语句的存储过程,我将针对该 select 语句中可能出现的各种情况编写多个测试。通过这样做,当测试失败时,我可以更轻松地隔离代码中出现问题的位置。

你还说你需要一个假表来验证结果。我假设你的意思是你需要将你正在测试的结果插入到一个表中,或者构建一个表来保存预期值。 (同样,在这里发布示例会非常有帮助)。下面是我如何捕获 View 结果并比较预期结果和实际结果的示例。请注意,我没有将 FakeTable 用于实际表或预期表。

CREATE PROCEDURE MyTests.[test CustomerOrderSummary counts orders for each customer]
AS
BEGIN
EXEC tSQLt.FakeTable 'Demo.Order';

INSERT INTO Demo.Order (OrderId, CustId) VALUES (1, 12);
INSERT INTO Demo.Order (OrderId, CustId) VALUES (2, 12);
INSERT INTO Demo.Order (OrderId, CustId) VALUES (3, 12);
INSERT INTO Demo.Order (OrderId, CustId) VALUES (4, 55);
INSERT INTO Demo.Order (OrderId, CustId) VALUES (5, 55);

SELECT CustId, NumOrders
INTO MyTests.Actual
FROM Reports.CustomerOrderSummary;

SELECT TOP(0) *
INTO MyTests.Expected
FROM MyTests.Actual;

INSERT INTO MyTests.Expected (CustId, NumOrders)
VALUES (12, 3);
INSERT INTO MyTests.Expected (CustId, NumOrders)
VALUES (55, 2);

EXEC tSQLt.AssertEqualsTable 'MyTests.Expected',
'MyTests.Actual';
END;

关于sql - 将数据插入到 tSQLt faketable 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com