2011-05-19 45 views
2

創建模擬應該跟蹤給定類的方法調用的順序時,這是否正確?散列類方法

 

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更好的東西嗎?

感謝,

巴里

+1

只是出於好奇,什麼是MockFoo.title?根據你的例子,這是一個錯誤。 – 2011-05-19 17:30:01

回答

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 

"Readability counts."

2

好,因爲在Python類方法名是唯一的,這是好值的任何其他使用。雖然個人,我不明白你爲什麼會打擾self.method1._ 名稱 _當'method1'會給你相同的結果。