使用Base.Test
进行单元测试,我很惊讶第一次测试失败后立即退出。
让我们考虑一下这个runtest.jl
文件:
using Base.Test
@testset "First" begin
# test fails
@test false
end;
@testset "Second" begin
# never run...
@test true
end;
julia runtest.jl
的输出始终是(第二次测试永远不会运行):
First: Test Failed Expression: false Stacktrace: [1] macro expansion at /home/picaud/Temp/runtests.jl:14 [inlined] [2] macro expansion at ./test.jl:860 [inlined] [3] anonymous at ./<missing>:? Test Summary: | Fail Total First | 1 1 ERROR: LoadError: Some tests did not pass: 0 passed, 1 failed, 0 errored, 0 broken.
我的问题:即使某些测试失败,如何运行并报告所有测试结果?
答案 0 :(得分:7)
阅读Julia doc Working-with-Test-Sets似乎必须系统地使用嵌套测试集:
通常使用大量测试来确保功能正常工作 正确地在一系列输入上。 如果测试失败,则 默认行为是立即抛出异常。但是,确实如此 通常最好先运行其余的测试以获得更好的效果 正在测试的代码中有多少错误的图片。
以及后来这句话:
@testset()宏可用于将测试分组。 所有的 将运行测试集中的测试,并在测试集的最后设置a 将打印摘要。
在上一个特例中,这个
using Base.Test
@testset "All tests" begin
@testset "First" begin
@test false
end;
@testset "Second" begin
# is run, ok
@test true
end;
end;
将运行所有测试:
First: Test Failed Expression: false Stacktrace: [1] macro expansion at /home/picaud/Temp/runtests.jl:5 [inlined] [2] macro expansion at ./test.jl:860 [inlined] [3] macro expansion at /home/picaud/Temp/runtests.jl:4 [inlined] [4] macro expansion at ./test.jl:860 [inlined] [5] anonymous at ./<missing>:? Test Summary: | Pass Fail Total All tests | 1 1 2 First | 1 1 Second | 1 1 ERROR: LoadError: Some tests did not pass: 1 passed, 1 failed, 0 errored, 0 broken.
答案 1 :(得分:1)
这是一个包含简单问题的loooong写作。答案也很简单:是的,添加外部测试集是实现目标的事实标准。