我想比较两个模块/类/方法,并找出类/方法是否已经改变。我们允许用户更改类/方法,并且在处理之后,我们使这些更改持久化,而不覆盖旧的类/方法。然而,在我们提交新的类之前,我们需要确定代码是否已经改变,并且如果方法的功能已经改变,例如输出不同并且性能也延迟相同的输入数据。我对性能改变没问题,但是我的问题是代码的变化以及如何记录 - 发生了什么变化。我写的东西像下面如何检查模块/类/方法是否已更改并记录更改?
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)
比较两者来获得差异,有没有更好的方法来做到这一点?
'diff'和'patch',它存在于所有的Unix和类Unix系统上,是你最好的朋友。 – 2010-11-08 15:52:25
所以你说的是你想在Python中使用版本控制系统? Mercurial:http://mercurial.selenic.com/? – katrielalex 2010-11-08 16:10:27