gpt4 book ai didi

sql-server - 当 tSQLt faketable 不重置表映射时如何恢复?

转载 作者:行者123 更新时间:2023-12-02 10:16:28 26 4
gpt4 key购买 nike

faketable 函数没有重新分配为正常。我使用 faketable 的所有表现在都包含我在单元测试插入中使用的值的内容。它有很多表,它使我的数据库毫无用处。请帮助解决此问题或至少解决其原因。这让我对在我们的 CI 部署过程中使用它感到非常紧张,也许更重要的是在我们的本地开发工作中使用它。

最佳答案

您的测试或代码之一可能使事务处于无法回滚的状态。这通常会导致在结果中看到一项或多项测试显示“错误”(而不是“成功”或“失败”)。

在这些情况下,FakeTable 操作不会回滚,表将保持伪造状态。

在幕后,FakeTable 会重命名该表并创建它的新副本。当重命名发生时,操作会记录在 tSQLt.Private_RenamedObjectLog 中。

例如,您可以使用以下代码来重现 tSQLt 无法正常回滚的错误:

EXEC tSQLt.NewTestClass 'SOF_Example'
GO

CREATE TABLE SOF_Example.MyTable (i INT);
GO

INSERT INTO SOF_Example.MyTable (i) VALUES (5);
GO

CREATE PROCEDURE SOF_Example.[test fake a table]
AS
BEGIN
EXEC tSQLt.FakeTable 'SOF_Example.MyTable';

INSERT INTO SOF_Example.MyTable (i) VALUES (12);

COMMIT;
END;
GO

EXEC tSQLt.Run 'SOF_Example';

您可以使用此代码来查看重命名的表日志:

SELECT OriginalName, SCHEMA_NAME(schema_id) + '.' + name AS [Name of Renamed Table], create_date
FROM tSQLt.Private_RenamedObjectLog
JOIN sys.objects ON ObjectId = object_id;

如果您多次重新执行测试,则每个伪造表的日志中可能会有许多条目。您可以使用 create_date 来帮助确定哪一个包含原始数据。

现在,话虽如此:最好不要在必须保存数据的数据库中编写和执行测试用例。最好的方法是使用不包含用户数据(最多仅包含必要的配置数据)的数据库。您应该在空白数据库中进行开发和单元测试。填充的数据库应用于其他形式的测试,例如集成、可用性、性能等。

关于sql-server - 当 tSQLt faketable 不重置表映射时如何恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161106/

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