0

我正在实现执行运行时检查的“智能”构造函数,如此处所述 https://wiki.haskell.org/Smart_constructors#Smart.28er.29_constructors

我的第一个问题是:如何对抛出的无效参数进行单元测试?

这是我尝试过的

import Control.Exception
import Test.HUnit

metalResistor :: Bands -> Resistor
metalResistor n = Control.Exception.assert (n >= 4 && n <= 8) $ Metal n

m0 = metalResistor 0
test1 = TestCase ( assertBool  (show mo) False)
tests = TestList [TestLabel "test1" test1]

结果是

*Main> runTestTT  tests
### Error in:   0:test1
Assertion failed
CallStack (from HasCallStack):
  assert, called at test.hs:42:19 in main:Main
Cases: 1  Tried: 1  Errors: 1  Failures: 0
Counts {cases = 1, tried = 1, errors = 1, failures = 0}

我的期望是在单元测试中捕获异常(assertThrow ?)并且测试成功。

我的第二个问题可能是更多的意见基础,但我不确定智能构造函数采用哪种方法:有错误的方法或有 Conntrol.Exception.assert 的方法

从长远来看,我觉得使用错误解决方案会更好;为了清楚起见以及代码维护和错误跟踪,再加上繁琐的编写一次总比繁琐的阅读 1000 次要好。

4

0 回答 0