You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过文件名/扩展名限制raco test仅执行指定测试文件?

问题描述

使用Rackunit编写单元测试时,执行raco test .命令会递归查找并运行所有Racket文件,包括大量不含测试代码的实现文件。由于需要为同一规范的多个实现共享单元测试,采用了单独编写测试文件的架构,但raco test的全量扫描导致效率低下,希望让该命令仅运行名称匹配*.test.rkt、*.spec.rkt、test-*.rkt等模式的文件(类似Jest或Pytest的行为)。曾尝试info.rkt中的test-include-paths,但发现它不适用于指定Racket文件白名单,询问是否可行。

可行方案

1. 直接通过命令行指定测试文件模式

raco test支持直接传入文件名通配符,无需扫描所有文件:

# 匹配当前目录及子目录下符合模式的测试文件
raco test **/*.test.rkt **/*.spec.rkt **/test-*.rkt

如果使用Windows Cmd,可改用PowerShell执行:

Get-ChildItem -Recurse -Include *.test.rkt,*.spec.rkt,test-*.rkt | ForEach-Object { raco test $_.FullName }

2. 用脚本或Makefile简化命令

为避免重复输入长命令,可封装为脚本或Makefile:

  • Makefile示例:
test:
	raco test **/*.test.rkt **/*.spec.rkt **/test-*.rkt

执行时只需运行make test。

  • Shell脚本示例(test.sh):
#!/bin/bash
raco test **/*.test.rkt **/*.spec.rkt **/test-*.rkt

赋予执行权限后运行./test.sh即可。

3. 反向排除非测试文件(备选)

info.rkt的test-omit-paths可以排除不需要测试的文件或目录,虽然不如直接指定测试文件直观,但适合实现文件集中存放的场景:
在项目根目录的info.rkt中添加:

#lang info
; 排除src、lib目录下的所有文件,仅运行其他目录中的测试文件
(test-omit-paths (list "src" "lib"))

4. 编写主测试入口文件

创建一个主测试文件,导入所有单独的测试模块,然后仅运行这个主文件:

#lang rackunit
; 导入所有测试文件
(require "./math.test.rkt" "./string.spec.rkt" "./test-io.rkt")

执行raco test main-test.rkt即可运行所有测试,无需扫描其他文件。

内容的提问来源于stack exchange,提问作者NPN328

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 06:54:25