Python单元中的实例初始化测试错误

时间:2013-04-15 10:00:09

标签: python unit-testing

我对Python有点新意,我遇到了一个我在这里或其他任何地方都无法找到的错误。可能是一个简单的:

我有一个单元测试类与女巫我想测试我的'控制器'类的方法。单元测试类看起来像这样:

import unittest
from Controller import Controller

class ControllerUnitTests(unittest.TestCase):

    def test_no_ants_must_be_in_own_dead_ants_list(self):
        controller = Controller()
        self.assertTrue(controller.__ourBots[0] is None)

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

我只是检查控制器类(ourBots,列表)中的属性是否没有项目。

当我运行代码时,我收到以下错误:

Finding files... done.
Importing test modules ... done.

======================================================================
ERROR:   test_no_ants_must_be_in_own_dead_ants_list
(ControllerUnitTests.ControllerUnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\rgroenve\Python\KamikazeMieren\src\ControllerUnitTests.py", line 22, in   test_no_ants_must_be_in_own_dead_ants_list
self.assertTrue(controller.__ourBots[0] is None)
AttributeError: Controller instance has no attribute '_ControllerUnitTests__ourBots'

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

看起来它正在自己的类中搜索属性,而不是我的控制器类。我不明白为什么以及怎么做。

控制器类的顶部如下所示:

class Controller:

__priority = 0
__ourBots = []

def __init__(self):
    pass

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:2)

具有两个前导下划线的成员是Python中的“私有”变量,即。他们使用名称标记来减少外部访问:http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

您必须将单元测试中成员的名称更改为受损的成员(这非常难看),或者最好使用该类的一些非“私有”接口。