1
我正在嘗試爲舊代碼創建單元測試(NUnit)。單元測試的最佳方式DbProviderFactory
我們使用DbProviderFactory檢查表中是否存在表之前,數據庫中存在。
我知道這看起來更像集成測試,但不管你怎麼稱呼它,我都需要對它進行測試。我寧願使用自包含的東西,而不依賴於數據庫。
我試圖使用Excel作爲我的數據源,但在Excel中選擇表應該有$後面的表名不會在我的情況下工作,因爲我不想修改我的代碼以適應單元測試。
我該如何單元測試下面的代碼?
static bool TableDoesNotExist(string tableName, string connectionString, string providerName = "System.Data.OleDb")
{
try
{
DbProviderFactory providerFactory = DbProviderFactories.GetFactory(providerName);
using (DbConnection conn = providerFactory.CreateConnection())
{
conn.ConnectionString = connectionString;
conn.Open();
DbCommand cmd = providerFactory.CreateCommand();
cmd.Connection = conn;
string tblQuery = "";
if (providerName == "System.Data.Odbc")
tblQuery = string.Format("SELECT COUNT(*) FROM SYSTABLE WHERE TABLE_NAME = '{0}'", tableName);
else
tblQuery = string.Format("SELECT COUNT(*) FROM [INFORMATION_SCHEMA.TABLES$] WHERE TABLE_NAME = '{0}'", tableName);
cmd.CommandText = tblQuery;
Console.WriteLine(cmd.CommandText);
DbDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
if (dt.Rows.Count == 1 && Convert.ToInt32(dt.Rows[0][0]) == 0)
{
return true;
}
}
return false;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return false;
}
任何幫助,將不勝感激。
您可以使用Shims來單元測試DbFactory。 –
這是非常古老的代碼,它使用.NET 2.0不確定墊片是否可以工作。任何其他想法? – Farukh