我有一個使用NHibernate的.NET項目。由於某些項目要求,非常特定的代碼段使用HQL通過「按newid()排序」來選擇隨機記錄。但是,爲了單元測試的目的,我使用了內存中的SQLite數據庫,這當然會對newid()產生影響。我只需要從單元測試運行時,需要使用此替代SQLite兼容查詢。我不能僅爲單元測試目的添加條件編譯常量,而#define只能在文件級別工作,所以我不能簡單地在那裏添加常量。使用不同的SQL命令進行單元測試的最佳方式是什麼?
我真的不想爲了啓用這個單元測試而使用一些垃圾代碼來清理我的存儲庫類。我有什麼選擇?
編輯:
我已經有其他的東西,一個全球性的課,所以我增加了一個靜態的測試模式屬性,這將是假的比我明確地將其設置爲我的單元測試以外的任何時間,因此代碼現在看起來像:
string random, update;
if (Globals.TestMode)
{
random = "from Customer order by random()";
}
else
{
random = "from Customer order by newid()";
}
這樣的工作,但我希望避免確切的這樣的if語句。仍在尋找建議。
你是單元測試隨機記錄的選擇,還是隻是你試圖單元測試的方法的依賴? – StriplingWarrior 2012-03-23 16:43:38
這兩種,我想。正在測試的方法應該選擇1條隨機記錄,並使用該記錄的信息更新單獨的表。我試圖測試(A)選擇的記錄是隨機的,(B)另一個表格包含正確的信息。 – Chris 2012-03-23 16:45:11
然後,您應該已經有兩個測試:第一個測試返回一個隨機記錄的事實,第二個測試記錄正確插入數據庫的事實。 否則,如果你的測試失敗,你將不得不調試你的測試,看看究竟是什麼失敗。 – 2012-03-23 17:05:35