gpt4 book ai didi

testing - 如何在 Julia 中创建动态命名的测试集?

转载 作者:行者123 更新时间:2023-12-04 02:31:43 26 4
gpt4 key购买 nike

使用 Julia 的测试包,如何创建在运行时引用值的 @testset

例如我有

test_data = [
(model="a",datapath="models/a.json"),
(model="b",datapath="models/b.json"),
...
]

我想这样做:

@testset "models" begin
for test in test_data
@testset test.model begin

# test range of values/functions here
end
end

end

但我收到这样的错误,我认为这是因为我试图在运行时定义测试集名称。

ERROR: LoadError: LoadError: LoadError: Unexpected argument test.model to @testset
Stacktrace:
[1] error(::String) at .\error.jl:33
[2] parse_testset_args(::Tuple{Expr}) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1244
[3] testset_beginend(::Tuple{Expr,Expr}, ::Expr, ::LineNumberNode) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1087
[4] @testset(::LineNumberNode, ::Module, ::Vararg{Any,N} where N) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1079
[5] include(::String) at .\client.jl:457
[6] top-level scope at C:\MyPackage\runtests.jl:7
[7] include(::String) at .\client.jl:457
[8] top-level scope at none:6

因为我在每个内部 @testset 中运行大量测试,所以在运行测试时将结果分组会非常好。此外,当我遇到错误时,它往往会出现在许多结果中,并且我的终端会丢失错误开始位置上方的历史记录,因此在每组测试之前打印模型名称也不会很好地工作.

最佳答案

您可以 interpolate使用标准 $ 语法的测试名称中表达式的值:


julia> using Test

julia> i = 1
1

julia> @testset "Model $i" begin
@test true
end
Test Summary: | Pass Total
Model 1 | 1 1

但在您的情况下,最好使用 @testset for ... end 语法而不是更常见的 @testset begin ... end(请参阅documentation 以获得更详细的解释):

julia> @testset "Model $i" for i in 1:2
@test i == i
end
Test Summary: | Pass Total
Model 1 | 1 1
Test Summary: | Pass Total
Model 2 | 1 1

在您的特定用例中,它看起来像:

julia> test_data = [
(model="a",datapath="models/a.json"),
(model="b",datapath="models/b.json"),
]
2-element Array{NamedTuple{(:model, :datapath),Tuple{String,String}},1}:
(model = "a", datapath = "models/a.json")
(model = "b", datapath = "models/b.json")

julia> @testset "Model $(test.model)" for test in test_data
@test test.datapath == "models/$(test.model).json"
end
Test Summary: | Pass Total
Model a | 1 1
Test Summary: | Pass Total
Model b | 1 1

关于testing - 如何在 Julia 中创建动态命名的测试集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63871868/

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