我似乎遇到了.NET中MySql连接器的问题。
我正在对我的数据库接口后端进行单元测试。部分测试是删除数据库,以便可以将整个数据库重新初始化为默认设置。这是我的测试通常的样子:
Imgur Image (Since I don't have the rep yet)
丢弃代码很简单:
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings[APPCONFIG_SCHEMA_CONNECTION_NAME].ConnectionString;
using (MySqlConnection conn = new MySqlConnection(connStr))
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "DROP DATABASE IF EXISTS securitydata;";
cmd.ExecuteNonQuery();
}
如果我使用工作台手动删除数据库并通过注释丢弃来修改测试,那么测试的速度比它们快50倍:
这都是使用NuGet.org上的NuGet包中的MySql Connector / NET。我在运行MySql 5.6.24的开发(本地)机器和使用MySql 5.5.41的最终生产机器上进行了测试。
答案 0 :(得分:1)
如果有人遇到同样的事情,我想出来了。以下是我使用TestInitialize的方法:
[TestInitialize]
public void InitializeTest(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
_database = new SecurityDatabase();
}
这对我来说是一种误解。 TestInitialize
运行每次测试,而不是在设置测试类时运行一次。我忘记了ClassInitialize
属性,该属性每TestClass
运行一次。修改后的代码是:
[ClassInitialize]
public static void InitializeClass(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
}
[TestInitialize]
public void InitializeTest()
{
_database = new SecurityDatabase();
}
现在测试表现正常,并且因为每个测试集只丢弃一次数据库,所以在我的一些测试用例中暴露了一些问题。