我正在使用Red Gate SQL Developer工具开发数据库.SQL Test是运行tSQLt测试的SSMS加载项,缺少重命名测试类的方法.
我有一个叫做的测试[BackendLayerCustomerAdministrationTests].[test uspMaintainCustomerPermissions throws error when PermissionValue is missing or empty].
这个名字很长,它破坏了Deployment Manager.
2013-12-05 18:48:40 +00:00 ERROR指定的路径,文件名或两者都太长.完全限定的文件名必须少于260个字符,目录名必须少于248个字符.
在这个类中还有其他笨拙的测试名称,所以我想从缩短类名开始.
一个更简洁的类名称CustomerTests.
sp_rename在这里没有帮助.
EXECUTE sys.sp_rename
@objname = N'BackendLayerCustomerAdministrationTests',
@newname = N'CustomerTests';
Run Code Online (Sandbox Code Playgroud)
消息15225,级别11,状态1,过程sp_rename,行374在@itemtype输入为'(null)'的情况下,可以在当前数据库'ApiServices'中找到名称为'BackendLayerCustomerAdministrationTests'的项目.
我该如何改变它?
tSQLt测试类是具有特殊扩展属性的模式.
Cade Roux 重命名模式的最佳解决方案是创建一个新模式,传输所有对象,然后删除旧模式.
如果我们在这里这样做,我们将失去扩展属性.
让我们为tSQLt框架进行调整.
创建一个新的测试类.
EXECUTE tSQLt.NewTestClass
@ClassName = 'CustomerTests';
Run Code Online (Sandbox Code Playgroud)
您应该在tSQLt.TestClasses视图中一起看到旧类和新类.
SELECT *
FROM tSQLt.TestClasses;
Name SchemaId
----------------------------------------- ----------
SQLCop 7
BackendLayerCustomerAdministrationTests 10
CustomerTests 14
Run Code Online (Sandbox Code Playgroud)
Cade使用Chris Shaffer的select变量连接技巧来构建传输语句列表,并打印结果.
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;
Run Code Online (Sandbox Code Playgroud)
丑陋但有效.
复制输出并作为新查询执行.
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];
Run Code Online (Sandbox Code Playgroud)
我在这里只展示了两个测试,但它应该适用于所有测试.
现在放弃旧的测试类.
EXECUTE tSQLt.DropClass
@ClassName = N'BackendLayerCustomerAdministrationTests';
Run Code Online (Sandbox Code Playgroud)
老班应该离开了.
SELECT *
FROM tSQLt.TestClasses;
Name SchemaId
----------------------------------------- ----------
SQLCop 7
CustomerTests 14
Run Code Online (Sandbox Code Playgroud)
再次运行所有测试以检查它是否有效.
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.
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
成功!
抱歉这么晚才进来!我是一名从事 SQL 测试的开发人员。
我们刚刚在最新版本的 SQL Test 中添加了重命名测试类的功能。
http://www.red-gate.com/products/sql-development/sql-test/
现在就像右键单击测试类的上下文菜单或按F2一样简单:

请记住,旧版本的 tSQLt 不会出现此选项。要升级,请右键单击数据库以卸载框架,然后执行“添加数据库...”以重新添加它(窗口中最右侧的按钮):

或者,您可以在 tSQLt 中调用一个名为 的新过程tSQLt.RenameClass,这就是 SQL Test 在幕后调用的内容。
如果您对此有任何问题,请告诉我们!
大卫
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |