作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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/
我是一名优秀的程序员,十分优秀!