Я пытаюсь сравнить два модуля / классы / метод и выяснить, изменился ли класс / метод. Мы разрешаем пользователям изменять классы / методы, и после обработки мы делаем эти изменения постоянными, не перезаписывая старые классы / методы. Однако перед тем, как мы фиксируем новые классы, нам необходимо установить, изменился ли код, а также изменились ли функционально методы, например, отличаются выходные данные и производительность также откладывается на те же входные данные. Я в порядке с изменением производительности, но моя проблема - изменения в коде и как войти - что изменилось. я написал что-то вроде ниже
class TestIfClassHasChanged(unittest.TestCase):
def setUp(self):
self.old = old_class()
self.new = new_class()
def test_if_code_has_changed(self):
# simple case for one method
old_codeobject = self.old.area.func_code.co_code
new_codeobject = self.new.area.func_code.co_code
self.assertEqual(old_codeobject, new_codeobject)
, где area()
- это метод в обоих классах. Однако, если у меня много методов, то здесь я вижу цикл по всем методам. Можно сделать это на уровне класса или модуля?
Во-вторых, если я обнаружу, что объекты кода не равны, я бы хотел внести изменения. Я использовал inspect.getsource(self.old.area)
и inspect.getsource(self.new.area)
для сравнения, чтобы найти разницу, может ли быть лучший способ сделать это?