首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多输出球拍的单元测试

多输出球拍的单元测试
EN

Stack Overflow用户
提问于 2016-12-10 23:26:30
回答 2查看 278关注 0票数 5

我试着用球拍进行单元测试。

通常情况下,我是成功的,我真的很喜欢rackunit。然而,我对这一具体情况有困难。

要测试的函数输出两个值。如何使用rackunit来测试这个?

当我打电话:

代码语言:javascript
复制
(game-iter 10)
>>  5 10

我试着用这个测试:

代码语言:javascript
复制
(check-equal? (game-iter 10) 5 10)

然而,它失败了:

代码语言:javascript
复制
. . result arity mismatch;
 expected number of values not received
  expected: 1
  received: 2
  values...:
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-10 23:56:48

我找不到任何已经存在的东西,所以我想出了一条很长的路。如果没有许多返回多个值的函数,则可以执行以下操作

代码语言:javascript
复制
(define-values (a b) (game-iter 10))
(check-equal? a 5)
(check-equal? b 10)

您可以为ab选择更好的名称。

您可以在某种程度上抽象这一点,例如:

代码语言:javascript
复制
;; 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)

(同样,选择比a b更好的名字。)

如果您想使这更通用,请看一看call-with-values

票数 2
EN

Stack Overflow用户

发布于 2016-12-25 10:54:44

一种简单的宏方法

@吉布斯蒂尔的回答是正确的,但我想说明的是,几个月前#球拍irc频道上的某个人给了我一种更普遍的方法:

代码语言:javascript
复制
(define-syntax check-values-equal?
  (syntax-rules ()
    [(_ a b) (check-equal? (call-with-values (thunk a) list)
                           b)]))

你会像这样使用它:

代码语言:javascript
复制
(check-values-equal? (game-iter 10) '(5 10))

还有一些改进的余地(例如添加对check-equal?宏的第三个参数的支持),但是,我发现这已经足够好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41081395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档