关于正确使用Julia& amp; Base.Test:即使有些失败也会运行所有测试

时间:2018-02-05 17:51:10

标签: unit-testing julia

使用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.

我的问题:即使某些测试失败,如何运行并报告所有测试结果?

2 个答案:

答案 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写作。答案也很简单:是的,添加外部测试集是实现目标的事实标准。