我正在嘗試將單元測試應用於正在處理的項目。我使用Python和MySQLdb工作,但我認爲這個討論是與語言無關的。 我想測試一個函數,我們稱之爲foobar()。它執行與以下類似的SQL查詢:數據庫連接是否應該被模擬?
cursor.execute("SELECT * FROM my_table WHERE a == " +varA+ " AND b < " +varB)
函數中存在一點點複雜性。 cursor.execute(query)
被調用的方式和頻率取決於foobar的參數。
現在我不確定是否應該模擬數據庫連接cursor
。 如果我不這樣做,這很糟糕,因爲測試取決於數據庫服務器的可用性。 如果我這樣做,這很糟糕,因爲模擬必須知道哪些查詢將被調用。但確切的查詢是一個實現細節。例如。查詢是寫成小寫還是大寫不影響foobar的正確性。但改變這將打破測試。由於有些複雜的模擬對象,測試也很難閱讀。
這是選擇較小的邪惡?有第三種方法嗎?
只有當這個話題很大時纔有這麼小的問題? – hakre