Есть ли make_my_diffs_pretty!замедлять мой набор тестов только при наличии ошибок? - PullRequest
0 голосов
/ 04 июня 2018

Я обнаружил, что могу добавить make_my_diffs_pretty! в своих тестах, и очень приятно иметь приличный дифференциал для сложных структур.

Я читал, что он медленнее, чем нормальные, но медленнее ли онтолько при выводе результата непроходного теста?(И так, он медленнее только тогда, когда тесты не проходят?)

1 Ответ

0 голосов
/ 04 июня 2018

Замедляет некоторые тесты, которые проходят или , не пройдя.Но влияние этой потери производительности полностью зависит от вашего конкретного набора тестов - поэтому вам нужно будет сравнить его с вашим собственным приложением, чтобы измерить разницу!

Вот исходный код для make_my_diffs_prtty!:

def self.make_my_diffs_pretty!
  require "pp"

  define_method :mu_pp, &:pretty_inspect
end

Поэтому, игнорируя незначительную потенциальную потерю производительности из require 'pp', давайте рассмотрим влияние переопределения метода mu_pp.

Например, давайте теперь посмотрим исходный код для diff метода подтверждения :

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 будет «очевидно»потерпеть поражение.Однако, используя метод make_my_diffs_pretty!, обратите внимание, что expect.size и actual.size теперь будут значительно больше - поэтому «полная проверка» будет проводиться чаще.

...