我正在尝试使用library rackunit进行一些测试。
但是,我想通过一次测试检查许多输出,如下所示:
#lang racket
(require rackunit)
(check-equal? (add1 1) (* 2 1) (- 3 1) (+ 2 0))
如您所见,此测试将通过,因为所有输出均为2。
但是,由于语法问题,此测试失败:
check-equal?: bad syntax in: (check-equal? (add1 1) (* 1 2) (- 3 1) (+ 2 0))
有多种方法可以使用多个程序返回值来执行此独特测试吗?
看documentation我找不到它。
如果我无法做到这一点,我想我会重复自己......
答案 0 :(得分:1)
您可以对=
使用更一般的check-true
,因为您的所有值都是数字。
#lang racket
(require rackunit)
(check-true (= (add1 1) (* 2 1) (- 3 1) (+ 2 0)))
答案 1 :(得分:1)
如果您只是检查数字,例如Gibstick建议,您可以使用check-true
和=
。但是,如果您没有测试数字,我们需要更具创意。
如果要检查相等性的对象是可传递的:(例如,如果(equal? a b)
和(equal? b c)
而不是(equal? a c)
,则可以在循环中运行check-equal?
:
(define items (list 'items 'to 'check))
(define compare-item 'correct-item)
(for ([i (in-list items)])
(check-equal? i compare-item))
当然,如果项目相等是不传递,那么您将需要检查每个项目与其他项目。你仍然可以通过循环执行此操作,它变得有点复杂。但是,一般来说,对项目的平等测试是可传递的。