如何找到@test失败的变量值

时间:2016-12-13 18:36:09

标签: unit-testing julia

进行单元测试时,了解故障点的变量值会很有帮助

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值的正确方法是什么?

修改 实际上,我正在寻找一个普通的&许多任意测试和变量的实用解决方案。

2 个答案:

答案 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;许多任意测试和变量的实际解决方案",因为通常这在单元测试的上下文中没有任何意义,除非你在这里提出的非常简单的场景,这是非常不典型的。