gpt4 book ai didi

racket - 运行测试子模块作为主钩子(Hook)

转载 作者:行者123 更新时间:2023-12-04 14:29:55 25 4
gpt4 key购买 nike

给定这段代码:

#lang racket/base

(module+ test
(require rackunit rackunit/text-ui)

(provide suite)

(define suite
(test-suite
"test tests"

(test-equal? "test string test"
"string"
"string")))

(run-tests suite))

;(require 'test)
;(suite)

如果最后两行被注释掉并且文件用raco test test.rkt运行,将输出

raco test: (submod "test.rkt" test)
1 success(es) 0 failure(s) 0 error(s) 1 test(s) run
0
1 test passed

这是预期的。

当文件只是作为脚本而不是 raco 运行时,我如何才能让文件运行它的测试?

我以为末尾的两行注释会做我想做的事:导入子模块然后调用函数,

(require 'test)
(suite)

但我得到:

$ racket test.rkt
require: unknown module
module name: #<resolved-module-path:'test>
context...:
standard-module-name-resolver

Learn Racket in Y Minutes似乎说 'test 作为 'symbol 是针对子模块的,但也许不是。

最佳答案

module+module* 声明的子模块在它们的包含模块中不能用于 require 因为它们可以依赖于它们的包含模块,和模块依赖图中的循环是不允许的。 (相比之下,用 module 声明的子模块不能依赖于它们的包含模块,但它们的包含模块可以 require 它们。)

尝试添加一个 main 子模块;当文件作为脚本运行时应该运行:

(module+ main
(require (submod ".." test))
(run-tests suite))

顺便说一句,Racket 约定是让 test 子模块运行测试,而不仅仅是定义它们。添加 main 子模块可能会使 raco test 停止为您的脚本工作;解决方法是将 (run-tests suite) 调用移至 test 子模块。

关于racket - 运行测试子模块作为主钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36459070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com