首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python Unittest

2014-01-05 
Python Unittest求助写了一个类,做单元测试的时候碰到了一个很诡异的问题。from unittest import TestCasec

Python Unittest求助
写了一个类,做单元测试的时候碰到了一个很诡异的问题。


from unittest import TestCase
class Account():
    def __init__(self, name, value = 0, subs = {}):
        self.name = name
        self.subs = subs
        self.value = value

class AccountTest(TestCase):
    def test_empty(self):
        base = Account('test', 100)
        self.assertEqual(base.name, 'test')
        self.assertEqual(base.value, 100)
        self.assertEqual(base.subs, {})


这一段代码跑出来没问题。可是在后面加了一个方法和测试之后,第一个的结果却不对了~

from unittest import TestCase
class Account():
    def __init__(self, name, value = 0, subs = {}):
        self.name = name
        self.subs = subs
        self.value = value

    def add_account(self, son):
        self.subs[son.name] = son

class AccountTest(TestCase):
    def test_empty(self):
        base = Account('test', 100)
        self.assertEqual(base.name, 'test')
        self.assertEqual(base.value, 100)
        self.assertEqual(base.subs, {})

    def test_add_account(self):
        base = Account('test', 100)
        father = Account('father')
        father.add_account(base)
        self.assertEqual(father.subs, {base.name: base})


有人知道是为什么么?
[解决办法]
貌似参数subs = {}用字典不对吧,默认参数只初始一次,变成是实例间共享的,没特别需求最好是改成不可变类型,类似:
class Account():
    def __init__(self, name, value = 0, subs = None):
        self.name = name
        self.subs = {} if subs == None else subs
        self.value = value

热点排行