我发现我可以在我的测试中添加make_my_diffs_pretty!
,并且对于复杂的结构来说有一个不错的差异非常好。
我读到它比正常的差异要慢,但是只有在输出非通过测试的结果时它才会变慢? (所以,只有当测试没有通过时,它才会变慢?)
答案 0 :(得分:0)
它会减慢某些传递或失败的测试的速度。但是这种性能损失的影响完全取决于您的特定测试套件 - 因此您需要在自己的应用程序上对其进行基准测试,以便衡量差异!
make_my_diffs_prtty!
的
def self.make_my_diffs_pretty!
require "pp"
define_method :mu_pp, &:pretty_inspect
end
因此,忽略require 'pp'
的微小潜在性能损失,让我们考虑重新定义mu_pp
方法的影响。
例如,现在让我们看看the source code for the diff
assertion method:
def diff exp, act
expect = mu_pp_for_diff exp
butwas = mu_pp_for_diff act
result = nil
need_to_diff =
(expect.include?("\n") ||
butwas.include?("\n") ||
expect.size > 30 ||
butwas.size > 30 ||
expect == butwas) &&
Minitest::Assertions.diff
return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless
need_to_diff
Tempfile.open("expect") do |a|
a.puts expect
a.flush
Tempfile.open("butwas") do |b|
b.puts butwas
b.flush
result = `#{Minitest::Assertions.diff} #{a.path} #{b.path}`
result.sub!(/^\-\-\- .+/, "--- expected")
result.sub!(/^\+\+\+ .+/, "+++ actual")
# ...
end
def mu_pp_for_diff obj
mu_pp(obj).gsub(/\\n/, "\n").gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX")
end
在输出失败测试结果之前,mu_pp
方法称为。它也被用作实际检查的一部分。
此外,行return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless need_to_diff
充当性能增强:通过快捷方式,差异显然会显示"失败。但是,通过使用make_my_diffs_pretty!
方法,请注意expect.size
和actual.size
现在会显着增大 - 因此"全面检查"将更频繁地进行。