关于正确使用Julia与Base.Test:失败后仍运行所有测试
让Base.Test跑完所有测试并报告全部结果
这个问题我之前踩过坑!Base.Test默认遇到第一个失败测试就直接终止程序,不过有几个简单的办法能让它执行完所有测试,最后统一汇总结果:
1. 用@testset包裹测试(推荐做法)
这是最规范的方式,把你的测试用@testset块组织起来,哪怕块里某条测试失败,其他测试依然会继续执行。举个实际的例子:
using Base.Test @testset "我的测试套件" begin @test 1 == 2 # 这条会失败 @test 3 == 3 # 这条会正常执行并通过 @test "hello" == "world" # 这条也会执行并失败 end
运行这段代码后,所有测试都会被执行,最后会输出完整的测试报告,告诉你总共有多少测试通过、多少失败。
2. 全局关闭“失败即退出”
如果你的测试没有用testset包裹,或者想要全局生效,可以手动设置exit_on_error为false,这样不管有没有测试失败,程序都会跑完所有测试:
using Base.Test # 全局禁用失败即退出的行为 Base.Test.exit_on_error(false) @test 1 == 2 # 失败,但程序继续往下跑 @test 4 == 4 # 执行通过 @test 5 == 6 # 执行失败
⚠️ 注意:这个设置是全局的,会影响之后所有测试的执行逻辑。
3. 嵌套testset做精细化管理
如果你的测试逻辑比较复杂,可以用嵌套testset来分组,不同组的测试互不干扰,每个子testset都会独立执行完内部所有测试:
using Base.Test @testset "核心功能测试" begin @testset "加法运算" begin @test 1+1 == 2 @test 2+3 == 6 # 失败,但这个子组里的其他测试继续 end @testset "乘法运算" begin @test 2*2 ==4 @test 3*3 ==8 # 失败,不影响加法组的测试执行 end end
这种方式的报告也会分层展示,让你能清晰看到哪组测试出了问题。
另外提一句:如果是Julia 1.0及以上版本,Base.Test已经正式更名为Test标准库,上面的代码把using Base.Test换成using Test就能正常运行,用法完全一致。
内容的提问来源于stack exchange,提问作者Picaud Vincent
相关产品推荐
相关产品推荐

