make_my_diffs_pretty!只有在出现错误时才减慢我的测试套件?
Does make_my_diffs_pretty! slow down my test suite only when there are errors?
我发现我可以在我的测试中添加 make_my_diffs_pretty!
,对于复杂的结构有一个像样的差异是非常好的。
我读到它比正常的差异慢,但只有在输出未通过测试的结果时才慢吗? (所以,只有当测试没有通过时它才会变慢?)
它会减慢某些通过 或 失败的测试。但是这种性能损失的影响完全取决于您的 特定测试套件 - 因此您需要在自己的应用程序上对其进行基准测试以衡量差异!
Here is the source code 对于 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
正在充当 性能增强:通过走捷径,diff 将 "obviously" 失败。但是,通过使用 make_my_diffs_pretty!
方法,请注意 expect.size
和 actual.size
现在将显着变大 - 因此 "full check" 将更频繁地执行。
我发现我可以在我的测试中添加 make_my_diffs_pretty!
,对于复杂的结构有一个像样的差异是非常好的。
我读到它比正常的差异慢,但只有在输出未通过测试的结果时才慢吗? (所以,只有当测试没有通过时它才会变慢?)
它会减慢某些通过 或 失败的测试。但是这种性能损失的影响完全取决于您的 特定测试套件 - 因此您需要在自己的应用程序上对其进行基准测试以衡量差异!
Here is the source code 对于 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
正在充当 性能增强:通过走捷径,diff 将 "obviously" 失败。但是,通过使用 make_my_diffs_pretty!
方法,请注意 expect.size
和 actual.size
现在将显着变大 - 因此 "full check" 将更频繁地执行。