make_my_diffs_pretty!只有在出现错误时才会放慢我的测试套件的速度?

时间:2018-06-04 09:03:31

标签: ruby minitest

我发现我可以在我的测试中添加make_my_diffs_pretty!,并且对于复杂的结构来说有一个不错的差异非常好。

我读到它比正常的差异要慢,但是只有在输出非通过测试的结果时它才会变慢? (所以,只有当测试没有通过时,它才会变慢?)

1 个答案:

答案 0 :(得分:0)

它会减慢某些传递失败的测试的速度。但是这种性能损失的影响完全取决于您的特定测试套件 - 因此您需要在自己的应用程序上对其进行基准测试,以便衡量差异!

make_my_diffs_prtty!

Here is the source code

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.sizeactual.size现在会显着增大 - 因此"全面检查"将更频繁地进行。