代码之家  ›  专栏  ›  技术社区  ›  sekmo

让你变得更漂亮!只有在出现错误的时候才放慢我的测试套件的速度?

  •  0
  • sekmo  · 技术社区  · 6 年前

    我发现我可以添加 make_my_diffs_pretty! 在我的测试中,对复杂的结构有一个不错的差别是非常好的。

    我读到它比正常的diffs慢,但是它只有在输出未通过测试的结果时才会慢吗?(所以,只有在测试没有通过的时候才会慢一些?)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tom Lord    6 年前

    它会减慢某些正在通过的测试 弱点。但这种性能损失的影响完全取决于 你的 特定的测试套件-所以你需要在你自己的应用程序上对它进行基准测试,以测量差异!

    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
    

    这个 木村 方法被调用 之前

    此外,该行: return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless need_to_diff 作为一个 :通过走捷径,diff将“明显”失败。但是,通过利用 make_my_diffs_pretty! 方法,注意 expect.size actual.size 现在将大大增加,因此“全面检查”将更频繁地进行。