0

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

为了测试脚本,我执行以下操作:

  1. 创建或重置两个数据库。
  2. 在我想测试的“新”数据库中做一个小改动(添加一个新条目,删除一个条目等)
  3. 运行脚本以同步两个实例。
  4. 在“旧”实例中查看更改是否在此处正确传播。

我手动完成所有工作,这确实是一项平凡的工作。我想要的是一个框架或工具,它可以自动执行步骤 1,3 和 4,并允许我编写我的更改和断言的脚本(就像在正常的单元测试中一样)并运行多个测试。

我查看了 SQL Server Data Tools,但它们对 SQL 单元测试的支持非常有限。这就是为什么我正在寻找这种自动化的一些替代方案或扩展MSTestxTest基于示例的原因。

4

1 回答 1

1

我不知道您的测试的复杂性,但是,回滚测试期间所做的更改可能会对您有所帮助(据我了解,主要困难是为测试设置初始状态)?

-- 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
于 2013-06-17T10:28:40.413 回答