Ruby: Получите список различных свойств между объектами

У Вас есть две опции при запущении тестов. Посмотрите на свою панель инструментов Test Tools. Существует четыре кнопки: Запустите тесты в текущем контексте, отладьте тесты в текущем контексте, запустите все тесты и отладьте все тесты в решении.

, Когда Вы хотите отладить единственный тест, можно поместить курсор в тело теста и нажать один из "текущего контекста" кнопки тестового прогона. Для запущения всех тестов в классе поместите курсор в тестовое имя класса и нажмите одну из тех кнопок.

, С другой стороны, можно создать тестовый список (Тест-> Создают Новый Тестовый Список), и использование, что для выбора тестов Вы хотите работать. Можно также использовать theis, чтобы отключить и удалить тесты.

7
задан Martin DeMello 30 October 2009 в 09:29
поделиться

3 ответа

требует некоторой настройки, но вот основная идея:

module CompareIV
  def compare(other)
    h = {}
    self.instance_variables.each do |iv|
      print iv
      a, b = self.instance_variable_get(iv), other.instance_variable_get(iv)
      h[iv] = b if a != b
    end
    return h
  end
end

class A
  include CompareIV
  attr_accessor :foo, :bar, :baz

  def initialize(foo, bar, baz)
    @foo = foo
    @bar = bar
    @baz = baz
  end
end

a = A.new(foo = 1, bar = 2, baz = 3)
b = A.new(foo = 1, bar = 3, baz = 4)

p a.compare(b)
7
ответ дан 7 December 2019 в 03:17
поделиться

Как насчет

class Object
  def instance_variables_compare(o)
    Hash[*self.instance_variables.map {|v| 
      self.instance_variable_get(v)==o.instance_variable_get(v) ? [] : [v,o.instance_variable_get(v)]}.flatten]
  end
end


>> car_a.instance_variables_compare(car_b)
=> {"@color"=>"Blue", "@sun_roof"=>false}
2
ответ дан 7 December 2019 в 03:17
поделиться

Не уверен, возможно ли сразу увидеть разницу свойств. Но работа заключается в том, чтобы попробовать .eql? оператор на обоих объектах

#for example, 

car_a.eql?(car_b)

#could test whether car_a and car_b have the same color, sunroof and wheels
#need to override this method in the Car class to be meaningful,otherwise it's the same as ==

Если есть разница, вы можете использовать метод To_Array класса объектов, например

car_a.to_a
car_b.to_a

, теперь сравнение двух массивов на предмет различий будет несложным.

Не тестировалось, но

(car_a | car_b ) - ( car_a & car_b )

или что-то в этом роде должно покажет вам разницу в свойствах.

HTH

0
ответ дан 7 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: