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

时间:2009-08-19 14:08:11

标签: c# .net sql nhibernate

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

5 个答案:

答案 0 :(得分:4)

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

var schema = new SchemaExport(config);
schema.Drop(true, true);
schema.Execute(true, true, false);

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我已经使用以下实用程序方法来运行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脚本(在某些情况下编辑它们以仅包含我想在测试中使用的数据),并将脚本文件路径传递到{{1}测试之前的方法。该方法解析脚本文件并分别执行由RunScriptFile行分隔的每个部分(我发现这极大地帮助解决了在运行SQL脚本时发生的错误)。

自从我编写代码以来,我已经有一段时间了,但我认为它要求脚本文件以GO行结束,以便执行最后一部分。

答案 3 :(得分:0)

看看这些帖子。

  

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

我发现它们非常有用,基本上他们正在扩展Mike Glenn的例子

答案 4 :(得分:0)

我使用Proteus(单元测试实用程序),可在此处使用Google代码:

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

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

非常强大

HTH