Julia中如何运行单个@testset?求有效实现方式
运行Julia包中单个@testset的方法
Julia官方的Pkg.test()命令不支持直接指定测试集名称,但可以通过以下几种实用方法实现只运行特定测试集:
方法一:临时修改测试文件并直接执行
- 打开包的测试入口文件(通常位于
test/runtests.jl) - 临时注释掉不需要运行的测试集,或者仅保留目标
@testset:
using MyPackage using Test @testset "MyPackage Tests" begin # 仅保留要运行的测试集 @testset "MyTest" begin @test 1+1 == 2 # 你的测试代码 end # 暂时注释其他测试集 # @testset "OtherTest" begin # @test 2*2 == 4 # end end
- 激活包环境后直接运行该测试文件:
julia> ] (@v1.9 pkg) > activate . (MyPackage pkg) > include("test/runtests.jl")
方法二:利用@testset的filter参数(Julia 1.7+)
从Julia 1.7版本开始,@testset支持filter关键字参数,可通过正则匹配测试集名称来筛选要运行的测试:
- 修改
test/runtests.jl,给顶层测试集添加filter参数,支持从命令行接收目标测试集名称:
using MyPackage using Test # 默认运行所有测试,若传入参数则匹配指定测试集 target_testset = isempty(ARGS) ? r".*" : Regex(ARGS[1]) @testset "MyPackage Tests" filter=target_testset begin @testset "MyTest" begin @test 1+1 == 2 end @testset "NestedTest.SubTest" begin @test 3-1 == 2 end @testset "OtherTest" begin @test 4/2 == 2 end end
- 激活包环境后,运行测试文件并传入目标测试集名称:
julia> ] (@v1.9 pkg) > activate . # 运行名为"MyTest"的测试集 (MyPackage pkg) > include("test/runtests.jl") "MyTest" # 运行嵌套测试集"NestedTest.SubTest"(正则需转义特殊字符) (MyPackage pkg) > include("test/runtests.jl") "NestedTest\\.SubTest"
如果想要更宽松的匹配(比如前缀匹配),可以把Regex(ARGS[1])改成x -> startswith(x, ARGS[1])。
方法三:借助TestEnv.jl手动运行测试
使用TestEnv.jl可以在当前环境中加载包的所有测试依赖,然后手动调用指定测试集:
- 先安装TestEnv.jl:
julia> ] (@v1.9 pkg) > add TestEnv
- 激活包的测试环境并加载依赖:
julia> using TestEnv julia> TestEnv.activate("MyPackage")
- 导入包和Test模块,直接运行目标测试集(可复制原测试文件中的对应测试代码,或如果测试集是独立函数则直接调用):
julia> using MyPackage, Test julia> @testset "MyTest" begin @test 1+1 == 2 # 原测试文件中"MyTest"的测试代码 end
内容的提问来源于stack exchange,提问作者Adam Cataldo
相关产品推荐
相关产品推荐

