我正在尝试使用 Racket 进行单元测试。
通常,我很成功,而且我真的很喜欢机架单元。但是,我在处理这个具体案例时遇到了麻烦。
要测试的函数输出两个值。我如何使用机架单元进行测试?
当我打电话时:
(game-iter 10)
>> 5 10
Run Code Online (Sandbox Code Playgroud)
我尝试使用这个测试:
(check-equal? (game-iter 10) 5 10)
Run Code Online (Sandbox Code Playgroud)
但是,它失败了:
. . result arity mismatch;
expected number of values not received
expected: 1
received: 2
values...:
Run Code Online (Sandbox Code Playgroud)
我找不到任何已经存在的东西,所以我想出了很长的路要走。如果你没有很多返回多个值的函数,你可以这样做
(define-values (a b) (game-iter 10))
(check-equal? a 5)
(check-equal? b 10)
Run Code Online (Sandbox Code Playgroud)
a
您可以为和选取更好的名称b
。
你可以用类似这样的东西来抽象一下:
;; check if (game-iter n) produces (values a-expect b-expect)
(define-simple-check (check-game-iter n a-expect b-expect)
(define-values (a b) (game-iter n))
(and (equal? a a-expect)
(equal? b b-expect)))
(check-game-iter 10 5 10)
Run Code Online (Sandbox Code Playgroud)
(再次,选择比 更好的名字a
b
。)
如果您想让它更加通用,请看一下call-with-values
。
归档时间: |
|
查看次数: |
499 次 |
最近记录: |