gpt4 book ai didi

redgate - 如何重命名 tSQLt 测试类?

转载 作者:行者123 更新时间:2023-12-04 17:00:56 30 4
gpt4 key购买 nike

我正在使用 Red Gate SQL Developer 开发数据库工具。 SQL Test ,运行 tSQLt 测试的 SSMS 加载项缺少重命名测试类的方法。

我有一个名为 [BackendLayerCustomerAdministrationTests].[test uspMaintainCustomerPermissions throws error when PermissionValue is missing or empty] 的测试.

名字这么长它breaks Deployment Manager .

2013-12-05 18:48:40 +00:00 ERROR The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.



这个类中还有其他笨拙的测试名称,所以我想从缩短类名开始。

更简洁的类名是 CustomerTests .

sp_rename在这里没有帮助。
EXECUTE sys.sp_rename
@objname = N'BackendLayerCustomerAdministrationTests',
@newname = N'CustomerTests';

Msg 15225, Level 11, State 1, Procedure sp_rename, Line 374 No item by the name of 'BackendLayerCustomerAdministrationTests' could be found in the current database 'ApiServices', given that @itemtype was input as '(null)'.



我该如何更改?

最佳答案

tSQLt 测试类是具有特殊扩展属性的模式。

Cade Roux 为 renaming schemas 提供的出色解决方案是创建一个新模式,传输所有对象,然后删除旧模式。

如果我们在这里这样做,我们将失去扩展属性。

让我们为 tSQLt 框架调整它。

如何重命名 tSQLt 测试类

创建一个新的测试类。

EXECUTE tSQLt.NewTestClass
@ClassName = 'CustomerTests';

您应该在 tSQLt.TestClasses 中看到旧类和新类在一起。看法。
SELECT *
FROM tSQLt.TestClasses;

Name SchemaId
----------------------------------------- ----------
SQLCop 7
BackendLayerCustomerAdministrationTests 10
CustomerTests 14

Cade 使用了 Chris Shaffer 的 select variable concatenation构建传输语句列表并打印结果的技巧。
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql = @sql +
N'ALTER SCHEMA CustomerTests
TRANSFER BackendLayerCustomerAdministrationTests.' + QUOTENAME(name) + N';' +
CHAR(13) + CHAR(10)
FROM sys.objects
WHERE SCHEMA_NAME([schema_id]) = N'BackendLayerCustomerAdministrationTests';

PRINT @sql;

丑陋,但有效。

复制输出并作为新查询执行。
ALTER SCHEMA CustomerTests
TRANSFER BackendLayerCustomerAdministrationTests.[test uspMaintainCustomer validate merged data];
ALTER SCHEMA CustomerTests
TRANSFER BackendLayerCustomerAdministrationTests.[test uspMaintainCustomerPermissions throws error when PermissionValue is missing or empty];

我在这里只展示了两个测试,但它应该适用于所有测试。

现在删除旧的测试类。
EXECUTE tSQLt.DropClass
@ClassName = N'BackendLayerCustomerAdministrationTests';

旧类应该从 View 中消失。
SELECT *
FROM tSQLt.TestClasses;

Name SchemaId
----------------------------------------- ----------
SQLCop 7
CustomerTests 14

再次运行所有测试以检查它是否有效。
EXECUTE tSQLt.RunAll;

+----------------------+
|Test Execution Summary|
+----------------------+

|No|Test Case Name |Result |
+--+----------------------------------------------------------------------------+-------+
|1|[CustomerTests].[test uspMaintainCustomer throws error on missing APIKey] |Success|
|2|[CustomerTests].[test uspMaintainCustomerPermissions validate merged data] |Success|
|3|[SQLCop].[test Decimal Size Problem] |Success|
|4|[SQLCop].[test Procedures Named SP_] |Success|
|5|[SQLCop].[test Procedures using dynamic SQL without sp_executesql] |Success|
|6|[SQLCop].[test Procedures with @@Identity] |Success|
|7|[SQLCop].[test Procedures With SET ROWCOUNT] |Success|
-------------------------------------------------------------------------------
Test Case Summary: 7 test case(s) executed, 7 succeeded, 0 failed, 0 errored.
-------------------------------------------------------------------------------

成功!

关于redgate - 如何重命名 tSQLt 测试类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434667/

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