我想将我的单元测试代码与其他代码分开。
我将测试代码放入一个文件中,将另一个代码放入同一目录中的另一个文件中:
实际的代码文件:
#lang racket
(provide
...procedure names...)
...procedures...
测试代码文件:
#lang racket
(require rackunit)
(require "...filename of the actual code file...")
...some additional procedures...
...test suite with multiple test cases in it...
然后我跑:
raco test test-code-filename
但是,这不起作用,在第一次调用过程的第一个测试用例时,它没有在测试代码文件中定义,它告诉我它是一个未绑定的标识符。
在此结构之前,我还尝试在文件中使用(module
和(module+
组合,但出现了同样的问题。
不知怎的,我似乎没有正确理解模块阅读文档。如何实现代码的这种分割(将它分成两个文件)?
答案 0 :(得分:2)
嗯...所有定义的都不是必需的。所以,例如,
foo.rkt:
#lang racket
(provide a)
(define (a x) (add1 x))
和bar.rkt:
#lang racket
(require rackunit
"foo.rkt")
;; passing test
(check-equal? (a 9) 10)
;; failing test:
(check-equal? (a 4) 6)
......正在运行
raco test /tmp/bar.rkt
生成此输出:
--------------------
FAILURE
actual: 5
expected: 6
name: check-equal?
location: (#<path:/tmp/bar.rkt> 9 0 111 22)
expression: (check-equal? (a 4) 6)
Check failure
--------------------
...所以我不确定为什么你的原始例子不起作用。听起来像其他事情正在发生。
答案 1 :(得分:0)
我似乎找到了答案。而不是使用:
(provide
a
b
c ...)
我需要使用:
(provide (all-defined-out))
所以还有一组额外的括号。总的来说,我得到了以下结构:
#lang racket
(provide (all-defined-out))
...procedures...
测试代码文件:
#lang racket
(require rackunit)
(require "...filename of the actual code file...")
...some additional procedures...
...test suite with multiple test cases in it...
然后:
raco test file-with-tests.rkt
作品。在失败的情况下,它仍然不会打印任何描述,但这是另一个问题。