我已經編寫了一個Matrix類,並且檢查了它不允許使用C++異常來增加不兼容大小的矩陣的乘法。我編寫了單元測試來檢查這種行爲,並且他們期待拋出異常。使用C++編譯錯誤的單元測試
現在我將Matrix大小從運行時變量更改爲模板參數。如果我能夠正確地做到這一點,那麼將會嘗試乘以錯誤大小的矩陣的代碼將不會編譯。
現在看來,這些單元測試是多餘的。但是,由於我不知道將來如何更改我的代碼,什麼會中斷,我仍然希望爲此執行測試。如果在我希望我的測試在特定位置拋出特定異常之前,現在我想讓我的測試在特定位置拋出特定的編譯錯誤。
這樣做的最佳方法是什麼?我會想象某種基於Makefile和shell腳本的機制,它會等待特定的錯誤代碼 - 或者我應該嘗試其他的東西嗎?這個想法是普遍的做法還是瘋狂?
編輯:當然,「單元測試」是不是這種機制的一個合適的名字,我知道,但現在,我想不出更好的辦法。已經有三位評論作者花費寶貴的時間和精力向我解釋單元測試是什麼,什麼不是。不幸的是,雖然在技術上是正確的,但這並沒有幫助解決這裏的實際問題。
編輯2:這是BDD的場景,我想測試:
- 由於尺寸的2x2和3x3的兩個矩陣
- 當用戶試圖將它們相乘
- Then他得到一個錯誤
之前,錯誤是運行時錯誤,並且測試它是微不足道的。但是現在我變成了一個編譯時錯誤,而且我看不到如何自動測試這個場景並確認每次提交(我在git鉤子中都有單元測試),它仍然給我一個錯誤。
單元測試是用於檢測運行時錯誤:如果你想檢查出來
這裏的文檔。編譯器用於檢測編譯時錯誤。 – RPGillespie 2015-02-23 21:39:15
單元測試不檢測運行時錯誤。單元測試檢查程序本身或運行時檢測到預期的運行時錯誤。我找的工具(你是對的,單元測試不是最好的名字)不會檢測到編譯錯誤,但會檢查編譯器是否檢測到它們。 – 2015-02-23 21:43:40
單元測試應測試其實現內部可以更改的黑盒函數,以便您可以驗證修改內部函數是否未破壞其功能。我會建議爲您的基礎設施製作與實施無關的API。像'bool canMultiply(Matrix&a,Matrix&b)'這樣的函數可以在內部使用任何內容,並且可以通過單元測試進行驗證。 – RPGillespie 2015-02-23 21:46:14