Вы можете определить свой пользовательский AbstractTestSet
.Он описан здесь в руководстве Julia.
Вот пример, адаптированный из руководства.Сначала определите:
using Test
struct CustomTestSet <: Test.AbstractTestSet
description::AbstractString
results::Vector
CustomTestSet(desc) = new(desc, [])
end
Test.record(ts::CustomTestSet, child::Test.AbstractTestSet) = push!(ts.results, child)
Test.record(ts::CustomTestSet, res::Test.Result) = push!(ts.results, res)
function Test.finish(ts::CustomTestSet)
if Test.get_testset_depth() > 0
Test.record(Test.get_testset(), ts)
end
ts
end
, и теперь вы можете написать:
julia> res = @testset CustomTestSet "custom testset" begin
# this testset should inherit the type, but not the argument.
@testset "custom testset inner" begin
@test 1==1
@test 1==2
@test 2==2
@test 2==3
end
end
CustomTestSet("custom testset", Any[CustomTestSet("custom testset inner", Any[Test Passed, Test Failed at REPL[10]:5
Expression: 1 == 2
Evaluated: 1 == 2, Test Passed, Test Failed at REPL[10]:7
Expression: 2 == 3
Evaluated: 2 == 3])])
julia> res.results[1].results
4-element Array{Any,1}:
Test Passed
Test Failed at REPL[10]:5
Expression: 1 == 2
Evaluated: 1 == 2
Test Passed
Test Failed at REPL[10]:7
Expression: 2 == 3
Evaluated: 2 == 3
, и у вас есть доступ к вектору, который сообщает вам, что прошло и что не удалось, а при ошибке - что былопроблема.
Вы также можете отфильтровать пройденные тесты:
julia> filter(x -> !(x isa Test.Pass), res.results[1].results)
2-element Array{Any,1}:
Test Failed at REPL[6]:5
Expression: 1 == 2
Evaluated: 1 == 2
Test Failed at REPL[6]:7
Expression: 2 == 3
Evaluated: 2 == 3
Если ваши тесты имеют более сложную вложенную структуру, вы должны делать это рекурсивно.
Это то, что выхотел?