如何从c#测试sql查询执行?

时间:2017-01-20 09:23:26

标签: c# sql unit-testing

我有以下方法:

public async Task SaveToLogAsync(string clientId)
{
    try
    {
        using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (var cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = @"INSERT INTO TerminalsActivityLog(ClientId, LogTime) VALUES(@clientId, @logTime)";
                cmd.Parameters.Add("@clientId", SqlDbType.VarChar).Value = clientId;
                DateTime dt = DateTime.Now;
                cmd.Parameters.Add("@logTime", SqlDbType.DateTime).Value = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0 , 0 , dt.Kind);

                await conn.OpenAsync();
                await cmd.ExecuteNonQueryAsync();
            }
        }
    }          
    catch (Exception )
    {
    }
}

如何在不保存到数据库的情况下编写单元测试?最佳选择是类似于EF的connectionString中的InMemory数据库。或者我应该保存到db然后删除保存的数据?

1 个答案:

答案 0 :(得分:0)

单元测试将具有自己的配置。您可以做的是在Unit测试项目的配置中的connectionstring中定义另一个数据库。

在单元测试项目中,创建一个创建该数据库并使用所有必要结构进行设置的安装方法。然后创建一个删除数据库的清理方法。