2015-02-09 75 views
0

我正在爲生成SQL語句的Java組件編寫單元測試。使用普通舊assertEquals("select col_1,col_2 from a_table", actualSql)會導致易碎的測試。例如:從HashSets生成的列列表具有不確定的順序;引用字符串之外的空格不重要。如何比較Java中的功能相等的SQL語句?

SQL的語法不是很複雜,我不需要跨SQL方言進行比較。但是編寫一個將SQL解析爲標準結構的函數是一項不重要的任務,而且感覺就像重新發明了輪子。每個人的代碼現在都有大量的單元測試支持:),所以必須有一個輕量級的方法來比較SQL。有人可以推薦一個嗎?

回答

1

只需使用測試數據庫執行SQL查詢並比較結果即可。

+0

由於以下原因,這不是一個真正的解決方案。我的要求是創建沒有數據庫依賴關係的unti測試。 – Chris 2015-02-09 17:25:48

+0

對不起 - 評論在我編輯時超時。不是一個真正的解決方案,有幾個原因。 1.我認爲引入數據庫依賴性是一種輕量級解決方案。 2.如果所述陳述是刪除,則沒有結果要比較。 3.不包含ORDER BY子句的SQL查詢以不確定的順序返回結果,因此有可能(儘管很小)兩個查詢的結果不同。 – Chris 2015-02-09 17:32:29