代码之家  ›  专栏  ›  技术社区  ›  Hannoun Yassir

如何在测试运行之前创建一个新的数据库?

  •  1
  • Hannoun Yassir  · 技术社区  · 15 年前

    在从模式文件运行测试之前,如何创建一个新的数据库(每次)?

    5 回复  |  直到 15 年前
        1
  •  4
  •   Mike Glenn    15 年前

    可以使用nhibernate中的SchemaExport类在代码中执行此操作:

    var schema = new SchemaExport(config);
    schema.Drop(true, true);
    schema.Execute(true, true, false);
    
        2
  •  1
  •   andersonbd1    15 年前

    删除整个数据库-不要逐表删除-这会增加太多的维护开销

        3
  •  1
  •   Fredrik Mörk    15 年前

    我使用以下实用工具方法来运行SQL脚本,以便在我偶尔使用的项目中设置数据库和测试数据。它工作得相当好:

    internal static void RunScriptFile(SqlConnection conn, string fileName)
    {
        long fileSize = 0;
        using (FileStream stream = File.OpenRead(fileName))
        {
            fileSize = stream.Length;
            using (StreamReader reader = new StreamReader(stream))
            {
                StringBuilder sb = new StringBuilder();
                string line = string.Empty;
                while (!reader.EndOfStream)
                {
                    line = reader.ReadLine();
                    if (string.Compare(line.Trim(), "GO", StringComparison.InvariantCultureIgnoreCase) == 0)
                    {
                        RunCommand(conn, sb.ToString());
                        sb.Length = 0;
                    }
                    else
                    {
                        sb.AppendLine(line);
                    }
                }
            }
        }
    }
    
    private static void RunCommand(SqlConnection connection, string commandString)
    {
        using (SqlCommand command = new SqlCommand(commandString, connection))
        {
            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("Exception while executing statement: {0}", commandString));
                Console.WriteLine(ex.ToString());
            }
        }
    }
    

    我已经用过了 Database Publishing Wizard 要生成SQL脚本(在某些情况下,将其编辑为只包含我希望在测试中使用的数据),只需将脚本文件路径传递到 RunScriptFile 测试前的方法。该方法解析脚本文件并执行由 GO 单独一行(我发现这对排除运行SQL脚本时发生的错误有很大帮助)。

    我写代码已经有一段时间了,但我认为它需要脚本文件以 行,以便执行其最后一部分。

        4
  •  0
  •   Nathan Fisher    15 年前

    看看这些帖子。

    Ayende Rahien - nhibernate-unit-testing
    Scott Muc - unit-testing-domain-persistence-with-ndbunit-nhibernate-and-sqlite

    我发现它们非常有用,基本上它们正在扩展迈克·格伦的例子。

        5
  •  0
  •   TheBoubou codingbadger    15 年前

    我使用proteus(单元测试实用程序),可在谷歌代码中找到:

    http://code.google.com/p/proteusproject/

    创建一组数据。每次运行单元测试时,都会保存当前数据,加载数据集,然后始终使用相同的数据集进行测试。最后恢复原始数据。

    非常有力

    高温高压