Q
单元测试异常
0
A
回答
2
这是不特定于HUnit,但你可以编写一个函数来检查IO
值是否抛出:
λ> :set -XScopedTypeVariables
λ> import Control.Exception
λ> import Data.Functor
λ> import System.Environment
λ> throws io = catch (io $> False) $ \(e :: SomeException) -> pure True
throws :: IO a -> IO Bool
λ> sequence $ throws <$> [ getEnv "HOME", getEnv "whatever", error "a" ]
[False,True,True]
2
如果一个“例外”你的意思是Exception
,它是在一些IO
抛出代码,那么你可以使用。但是,如果您的意思是在纯代码中捕获诸如error "Something bad happened"
之类的内容,那么您运气不好。如果你愿意做处理中IO
,你有更多的选择:
ghci> import Control.Exception
ghci> catch (error "Eek") (\(ErrorCallWithLocation msg _) -> putStrLn msg)
Eek
从哈斯克尔2010年报告section 3:表达式计算过程
错误,请⊥(“底部标示“),无法通过Haskell程序区分未终结。
这里是另一种方式来想一想:你会注意到现在我们试图评估值是⊥(如error "Help!"
)并不取决于当这个值创建但只有当它是第一需要(因为Haskell不严格)。捕捉这种错误的机制会破坏参照透明性。
相关问题
- 1. Java单元测试异常
- 2. 单元测试异常消息
- 3. 单元测试的IOError异常处理
- 4. ASP.Net MVC单元测试异常
- 5. 单元测试.net类:异常和File.WriteAllText
- 6. 预期异常单元测试
- 7. 单元测试ServiceStack缓存异常
- 8. Haskell异常和单元测试
- 9. MSTest单元测试 - 处理异常
- 10. android.util.Patterns单元测试返回NullPointerException异常
- 11. 单元测试空指针异常
- 12. 单元测试间歇OOM异常
- 13. 单元测试中的捕获异常
- 14. 单元测试异常OneToMany.orphanRemoval()Z
- 15. 单元测试异常财产
- 16. Visual Studio单元测试安全异常
- 17. 单元测试异常处理
- 18. Debug.Assert在异常单元测试中
- 19. 如何测试是否在单元测试中出现异常
- 20. Python单元测试:我如何测试异常中的参数?
- 21. 单元测试101 - 从我的单元内抛出异常
- 22. Swift单元测试:异步
- 23. 针对特定异常的单元测试异步方法
- 24. 在单元测试中检测完成异常
- 25. 异常不陷入尝试 - 除了单元测试
- 26. 在activemq调试单元测试时获得空指针异常
- 27. 如何在单元测试简单方法时引发异常
- 28. Junit异常测试
- 29. JUnit异常测试
- 30. 测试cin异常
这也适用于'错误'? – cberkay
是的,假设你使用'error'来产生'IO'类型的值。我已经更新了包含这个的答案。 –
谢谢。我可能错过了一些明显的东西,但是当我将代码输入到repl中时,我得到'throws io = ...'的错误: '非法类型签名:'SomeException' 类型签名只允许在具有ScopedTypeVariables的模式中 – cberkay