C# 在.Net中测试复杂的T-SQL脚本?
我正在使用T-SQL开发一个复杂的数据转换脚本。脚本必须在新数据库方案和旧方案之间转换数据 要测试脚本,我将执行以下操作:C# 在.Net中测试复杂的T-SQL脚本?,c#,.net,sql,testing,automated-tests,C#,.net,Sql,Testing,Automated Tests,我正在使用T-SQL开发一个复杂的数据转换脚本。脚本必须在新数据库方案和旧方案之间转换数据 要测试脚本,我将执行以下操作: 创建或重置两个数据库 在我想测试的“新”数据库中做一个小改动(添加一个新条目、删除一个条目等) 运行脚本以同步两个实例 在“old”实例中查看更改是否在此处正确传播 我做任何事情都是手工的,这真的是一个平凡的工作。我想得到的是一个框架或工具,它将自动执行步骤1、3和4,并允许我编写更改和断言脚本(就像在普通单元测试中一样),并运行多个测试 我查看了SQL Server数据工
我查看了SQL Server数据工具,但它们对SQL单元测试的支持非常有限。这就是为什么我在寻找一些替代方案,或者基于扩展的
MSTest
或xTest
的自动化示例。我不知道您的测试的复杂性,但是,可能是,回滚测试期间所做的更改将帮助您(据我所知,主要的困难是为测试创建初始状态)
样本测试(应将所有不存在的记录转移到旧表中):
不太清楚你在步骤中做了什么,但听起来你应该能够通过SSIS实现这些步骤。@NitinAgrawal我试图改进措辞。我的步骤就像是针对两个数据库运行的单个单元测试,我希望自动化测试。我知道SSI,但在我看来,每次测试创建SSI的成本太高。谢谢你的建议!这和我现在的做法很相似。问题不在于重置更改(我使用的是一个带有最新更改时间戳的特殊字段。但是在这种情况下,我必须将完整的脚本复制到每个测试体,并且我无法自动执行测试。
-- The table from old database
CREATE TABLE [dbo].[People]
(
[Id] [int] NOT NULL PRIMARY KEY,
[FullName] [nvarchar](100) NOT NULL
)
-- The table from new database
CREATE TABLE [dbo].[People](
[Id] [int] NOT NULL PRIMARY KEY,
[FirstName] [nvarchar](100) NOT NULL,
[LastName] [nvarchar](100) NULL
)
BEGIN TRAN
INSERT INTO
[Old_Database].[dbo].[People]
SELECT
New_People.[Id],
(New_People.[FirstName] + ' ' + New_People.[LastName]) AS FullName
FROM
[New_Database].[dbo].[People] AS New_People
WHERE
NOT EXISTS(SELECT [Id] FROM [Old_Database].[dbo].[People] WHERE [Old_Database].[dbo].[People].[Id] = New_People.Id)
IF (@@ROWCOUNT = 0)
PRINT('Failed!');
ELSE
PRINT('Passed.');
-- We can look, what was changed
SELECT * FROM [Old_Database].[dbo].[People]
-- Do not commit the changes. This allows to run test many times
ROLLBACK TRAN