【问题标题】:Unit Test to Run .sql script to SQL Create Database运行 .sql 脚本到 SQL 创建数据库的单元测试
【发布时间】:2010-07-07 22:58:41
【问题描述】:

谁能告诉我如何让 NUnit 测试运行 .sql 文件来创建/设置数据库。

我知道 NUnit 中的 TestFixtureSetUp 和 TestFixtureTearDown 属性/方法。

所以我知道如何在所有或每个单元测试之前和之后调用方法。

我只是不确定如何以编程方式在 SQL Server 2005 数据库中加载和执行 .sql 文件的内容。

有什么例子吗?

这是我们 TDD / CI 的一部分。我们希望在执行单元测试之前创建数据库并在执行单元测试后拆除数据库。

干杯,

--李

更新: 我现在已经在单元测试之外使用批处理文件调用 sqlcmd 来创建数据库/运行 .sql 脚本。这似乎工作正常。

【问题讨论】:

    标签: sql tdd nunit continuous-integration


    【解决方案1】:

    我在 .bat 文件中使用了 sqlcmd.exe 来运行 .sql 脚本,作为 CI 构建的单独部分,以便在单元测试之前立即执行。

    这似乎是一种可以接受的方式。

    【讨论】:

      【解决方案2】:

      我使用一个文本文件,每行一个 sql 语句。 TestFixtureSetUp 方法(逐行)读取此文件并使用 ADO.NET 的 IDbCommand 执行每个 sql 语句:

      类似:

      using (IDbConnection cnn = OpenConnection(connectionString))
        foreach (string line in ReadFile(sqlFile))
          using (IDbCommand cmd = cnn.CreateCommand()) {
            cmd.CommandText = line;
            cmd.ExecuteNonQuery();
          }
      

      你可能还想看看SQL Installer.NET之类的东西

      【讨论】:

      • 不好,ExecuteNonQuery 似乎不喜欢 GO、EXEC 或 USE 命令。可能会在单元测试之外退出数据库的创建,但仍然是 CI 构建的一部分。
      【解决方案3】:

      看看Fluent-Migrator
      它能够针对 SQL Server 2005 运行 SQL 脚本,并且可以从 nant 运行。

      该项目的目的是允许开发人员在域更改时迁移数据库,特别是 TDD,但如果需要,还允许更改更改。

      【讨论】:

      • 干杯内森,但我正在考虑从单元测试中运行 .sql 脚本,正如我在问题中解释的那样。感谢您提供替代方案。
      猜你喜欢
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      相关资源
      最近更新 更多