进行单元测试时,了解故障点的变量值会很有帮助
julia> @test a*4==2
Test Failed
Expression: a * 4 == 2
Evaluated: 4 == 2
ERROR: There was an error during testing
in record(::Base.Test.FallbackTestSet, ::Base.Test.Fail) at .\test.jl:397
in do_test(::Base.Test.Returned, ::Expr) at .\test.jl:281
e.g。在上面的最小测试中,如果测试失败,显示a
值的正确方法是什么?
修改 实际上,我正在寻找一个普通的&许多任意测试和变量的实用解决方案。
答案 0 :(得分:2)
抓住错误?如果你仍然希望再次抛出错误,你可以重新抛出它。
a = 2
try @test a*4 == 2
catch ex
println("a = $a")
error(ex)
end
会给:
测试失败
表达式:a * 4 == 2
评估:8 == 2
a = 2
LoadError:ErrorException("测试过程中出现错误") 加载在[44]中,从第5行开始的表达式
>错误(:: ErrorException)at ./error.jl:22
答案 1 :(得分:2)
你的问题对我来说没什么意义。你想要一个"将军"解决方案,但你似乎给了一个非常特定的"例如,您的测试是一个包含变量的简单表达式,通常不会出现单元测试的情况。
@test
宏本身并没什么特别之处,它只是一个非常方便的功能; "测试"在您的情况下,本身就是表达式a * 4 == 2
。
通常,测试将是一个定制的测试函数,返回一个布尔值(例如testFunction1()
)或一个测试,你的函数根据规范就特定输入的返回值而行动(例如{{1} })。这是实际测试。 function1(2,3) == 5
只是美化输出。在更一般的单元测试场景中谈论变量是没有意义的,其中通常没有任何东西,更不用说这是@test
宏功能的一部分了。美化功能!
因此,我的意见是,如果您想在您设想的非常具体的测试方案中检查变量,您可以提出一种非常具体的方法来实现,例如:像亚历山大所建议的那样,或者更一般地说,通过使任何变量的收集涉及测试功能本身的一部分,用于潜在的检查。但是要求一个" general& amp;& amp;许多任意测试和变量的实际解决方案",因为通常这在单元测试的上下文中没有任何意义,除非你在这里提出的非常简单的场景,这是非常不典型的。