我正在写一些使用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