这是创建模拟时的正确方法,该模拟应该跟踪为给定类调用方法的顺序吗?
class MockFoo(): def __init__(self): self.calledMethods = [] def medthod1(self): self.calledMethods.append(self.medthod1.__name__) def medthod2(self): self.calledMethods.append(self.medthod2.__name__) self.assertEqual(len(foo.calledMethods),2) self.assertEqual(foo.calledMethods[0],MockFoo.title.__name__)
我可以保存比name
更好的内容吗?
谢谢,
百里
答案 0 :(得分:2)
因为Python类中的方法名称是唯一的,所以它与其他任何使用的一样好。虽然我个人不明白为什么你会为self.method1._ name _而烦恼,因为'method1'会给你相同的结果。
答案 1 :(得分:1)
您当然可以这样做,但请考虑以下两种方法,并确定哪种方法更具可读性:
% cat mockfoo.py
#!/usr/bin/env python
import unittest
class MockFoo(object):
def __init__(self):
self.called_methods = []
def method1(self):
self.called_methods.append(self.method1.__name__)
def method2(self):
self.called_methods.append('method2')
class TestMockFoo(unittest.TestCase):
def test_list_with_name(self):
foo = MockFoo()
foo.method1()
self.assertEquals(1, len(foo.called_methods))
self.assertEquals(foo.method1.__name__, foo.called_methods[0])
def test_list_readable(self):
foo = MockFoo()
foo.method2()
self.assertEquals(1, len(foo.called_methods))
self.assertEquals('method2', foo.called_methods[0])
if __name__ == '__main__':
unittest.main()
% ./mockfoo.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK