我正在使用自定义测试框架,我们正在尝试扩展一些断言功能,以便在断言失败时包含自定义错误消息。当前的断言被称为:
assert_compare(first_term, :neq, second_term) do
puts 'foobar'
end
我们想要具有以下功能的东西:
assert_compare(first_term, :neq, second_term, error_message) do
puts 'foobar'
end
这样如果块失败,错误消息将描述失败。我认为这很难看,因为我们正在逐渐退出的框架做了这个,我必须经历许多看起来像这样的陈述:
assert.compare(variable_foo['ARRAY1'][2], variable_bar['ARRAY2'][2], 'This assert failed because someone did something unintelligent when writing the test. Probably me, since in am the one writing this really really long error statement on the same line so that you have to spend a quarter of your day scrolling to the side just to read it')
这种类型的方法调用使得难以读取,即使在为错误消息使用变量时也是如此。我觉得应该有更好的方式。
assert_compare(first_term, :neq, second_term) do
puts 'foobar'
end on_fail: 'This is a nice error message'
对我而言,这是最好的方法,但我不知道如何或是否有可能在红宝石中实现这一点。
这里的目标是使其尽可能美观。有什么建议吗?
答案 0 :(得分:2)
你可以使on_fail
成为任何assert_compare
返回的方法并写入
assert_compare(first_term, :neq, second_term) do
puts 'foobar'
end.on_fail: 'This is a nice error message'
答案 1 :(得分:0)
简而言之,没有。 ruby中的方法仅将块作为最终参数。正如Chuck所提到的,你可以尝试使on_fail方法成为assert_compare返回的方法,这是一个很好的解决方案。我提出的解决方案并不是你想要的,但它确实有效:
def test block, param
block.call
puts param
end
test proc { puts "hello"}, "hi"
将导致
“你好”
“喜”
我在这里做的是创建一个Proc(它本质上是一个块),然后将它作为常规参数传递。