散列类方法

时间:2011-05-19 12:59:04

标签: unit-testing python-3.x

这是创建模拟时的正确方法,该模拟应该跟踪为给定类调用方法的顺序吗?


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更好的内容吗?

谢谢,

百里

2 个答案:

答案 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

"Readability counts."