2016-03-07 73 views
0

我有一些庫的內部邏輯。之前我用這樣的表述來檢查我的內在邏輯的輸入數據:Debug.Assert在異常單元測試中

if (value < 0) 
    throw new ArgumentOutOfRangeException("value"); 

但我的圖書館十分性能sensetive,所以現在我使用這樣的表達式只爲我的API來檢查用戶輸入。 我的內部代碼的內部輸入與Debug.Assert一起檢查,以在發佈中節省幾個性能。

但現在,我的內部代碼檢查無效輸入的單元測試不起作用。通過Debug.Assert,沒有任何異常。 那麼如何在我的單元測試中檢查Debug.Assert?

+2

嗯,它不能因爲你實際上沒有任何形式的檢查。你有沒有考慮過使用[CodeContracts](https://github.com/Microsoft/CodeContracts)來使你的代碼可以只採取有效的輸入?它應該像Debug.Assert一樣工作,所以代碼在發佈版本中不會存在,但是你可以證明你的代碼沒有傳入一個無效的值。 –

+1

當我說「你實際上沒有任何形式的檢查」時,我的意思是你的單元測試可能與程序的「發佈」版本工作,當處於發佈模式時,System.Diagnostics.Debug類中的所有函數成爲NO-OP,不做任何事情。 –

+0

@ScottChamberlain非常感謝!代碼合同正是我所需要的! –

回答

1

嗯,它不能因爲你實際上沒有任何形式的檢查,你的單元測試可能與程序的「發佈」版本工作,當在發佈模式下System.Diagnostics.Debug類中的所有功能都成爲NO -OPs,不要做任何事情。

您是否考慮過使用CodeContracts來使您的代碼可證實僅採取有效輸入?它應該像Debug.Assert一樣工作,因此代碼不會在發行版本中存在,但是您可以證明沒有任何代碼傳入無效值。