我正在寫一些使用HUnit的測試,我想斷言某個特定函數在給定某個輸入時會拋出異常。我無法找到提供所需功能的斷言函數。任何人都知道一個測試框架呢?在任何Haskell測試框架中是否存在assertException?
14
A
回答
18
雖然HUnit不附帶任何異常的斷言,可以很容易地編寫自己:
import Control.Exception
import Control.Monad
import Test.HUnit
assertException :: (Exception e, Eq e) => e -> IO a -> IO()
assertException ex action =
handleJust isWanted (const $ return()) $ do
action
assertFailure $ "Expected exception: " ++ show ex
where isWanted = guard . (== ex)
testPasses = TestCase $ assertException DivideByZero (evaluate $ 5 `div` 0)
testFails = TestCase $ assertException DivideByZero (evaluate $ 5 `div` 1)
main = runTestTT $ TestList [ testPasses, testFails ]
你可以做一些更看中的一樣,如果你喜歡用一個謂語,而不是明確的比較。
$ ./testex
### Failure in: 1
Expected exception: divide by zero
Cases: 2 Tried: 2 Errors: 0 Failures: 1
注意evaluate
這裏可能會被優化掉(參見GHC票#5129),但在IO
單子測試代碼這應該很好地工作。
5
您可以從testpack使用assertRaises
。
0
hspec(或更準確地說hspec-expectations)有shouldThrow
。
相關問題
- 1. .NET中是否有任何功能測試框架,如JFunc
- 2. 任何測試框架是否支持TypeScript中的內嵌測試?
- 3. 測試框架是否存在允許失敗的百分比?
- 4. .NET是否有任何框架來填充測試數據?
- 5. Haskell中是否存在任何隱式存儲?
- 6. 是否有任何通用框架來測試內存數據庫
- 7. 測試Haskell函數是否存在空間泄漏
- 8. JUnit框架是否有測試?
- 9. Rascal是否有單元測試框架?
- 10. 如何找出框架是否存在
- 11. Corba組件之外是否存在任何C++組件框架?
- 12. python中是否有任何基於故事的BDD測試框架?
- 13. XSLT測試任何鍵入的節點是否存在
- 14. 任何基於URL測試動作是否存在的方法?
- 15. makefile:想測試是否存在任何文件(* .sh)
- 16. 在javascript中是否存在任何不可知的庫驗證框架?
- 17. 測試類中是否存在字段
- 18. Rascal單元測試框架是否支持測試夾具?
- 19. Boost測試框架是否支持測試依賴關係?
- 20. 是否有支持測試依賴性的Python測試框架?
- 21. 這個PHPUnit測試是否有意義(或者我正在測試框架/ PHP)?
- 22. 如何在Boost測試框架中重用測試用例?
- 23. 如何在VS08單元測試框架中測試WPF組件?
- 24. 在摩卡測試框架中是否有任何可能性將測試報告存儲在本地文件中
- 25. C是否存在一個強制競爭條件的測試框架?
- 26. 是否存在用於對JavaScript和HTML進行單元測試的框架
- 27. 如何測試浮點數是否是haskell中的整數?
- 28. 是否存在MySQL,PHP,JSON框架?
- 29. C++ shell框架是否存在?
- 30. 在測試類中運行單個或全部測試時,執行過程中是否存在任何差異
不錯的例子。這是一個修改後的版本,打印如果沒有異常或者是另一個異常http://stackoverflow.com/a/33266991/3029422 – Ionut 2015-10-22 13:47:05