2013-04-15 98 views
0

我对于Python有点新,而且我陷入了一个错误,我似乎无法在这里或在互联网上的其他任何地方找到这个错误。可能是一个简单的: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 

关于如何解决此问题的任何想法?

+0

Controller()是否有'ourBots'? –

+0

是的,但是,它被声明为一个'私人'变量,像这样:__ourBots = [] 我明白,在Python中没有真正的私有变量,所以我可以从我的单元测试。 –

+0

感谢您的帮助,我将控制器的顶部添加到了我的问题 –

回答

2

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

您必须将单元测试中成员的名称更改为损坏的名称(这非常丑陋),或者最好使用一些非类“私人”界面。

+0

+1我学到了新东西! :) 哇!谢谢! –

+0

非常感谢!我从来没有想过我必须在那里寻找解决方案!非常感谢!! –