在Racket中通过一次测试检查多个输出

时间:2016-12-11 01:33:34

标签: unit-testing lisp racket

我正在尝试使用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我找不到它。

如果我无法做到这一点,我想我会重复自己......

2 个答案:

答案 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))

当然,如果项目相等是传递,那么您将需要检查每个项目与其他项目。你仍然可以通过循环执行此操作,它变得有点复杂。但是,一般来说,对项目的平等测试是可传递的。