如何对不可能进行构造时抛出的智能构造函数进行单元测试?

时间:2018-09-28 09:46:23

标签: unit-testing haskell hunit

我正在实现执行此处运行时检查的“智能”构造函数 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次的乏味更好。

0 个答案:

没有答案