Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.Net中测试复杂的T-SQL脚本?_C#_.net_Sql_Testing_Automated Tests - Fatal编程技术网

C# 在.Net中测试复杂的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数据工

我正在使用T-SQL开发一个复杂的数据转换脚本。脚本必须在新数据库方案和旧方案之间转换数据

要测试脚本,我将执行以下操作:

  • 创建或重置两个数据库
  • 在我想测试的“新”数据库中做一个小改动(添加一个新条目、删除一个条目等)
  • 运行脚本以同步两个实例
  • 在“old”实例中查看更改是否在此处正确传播
  • 我做任何事情都是手工的,这真的是一个平凡的工作。我想得到的是一个框架或工具,它将自动执行步骤1、3和4,并允许我编写更改和断言脚本(就像在普通单元测试中一样),并运行多个测试


    我查看了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