因此,我尝试在python中为线程类设置unittest
这个班看起来像这样:
@Singleton
class EventManager(threading.Thread):
def __init__(self):
self.__eventDict = {}
self.__eventDictLock = threading.Lock()
self.__eventQueue = Queue()
self.__subscriberList = []
threading.Thread.__init__(self)
def run(self):
while(True):
if self.__eventQueue.qsize() > 0:
self.__runEvent()
else:
time.sleep(1)
我的单元测试如下所示:
eventManager = EventManager.Instance()
eventManager.start()
class EventManagerTest(unittest.TestCase):
#pre-test initialization
def setUp(self):
pass
#post-test destruction
def tearDown(self):
pass
def testRegisterEvent(self):
global eventManager
logger.debug("Entering testRegisterEvent()")
eventManager.registerEvent("MyEvent")
logger.debug("testRegisterEvent() appears to have successfully registered")
self.assertIn("MyEvent", eventManager.__subscriberList)
self.assertFalse( eventManager.__eventDict["MyEvent"])
我得到了这样一个错误:
ERROR: testRegisterEvent (__main__.EventManagerTest)
Traceback (most recent call last):
File "EventManager_Test.py", line 59, in testRegisterEvent
self.assertIn("MyEvent", eventManager.__eventDict)
AttributeError: 'EventManager' object has no attribute '\_EventManagerTest\__eventDict'
_EventManagerTest__eventDict
属性来自哪里?这不是我调用的属性,它阻止我运行单元测试。你知道吗
由于
__eventDict
以两个下划线开头,它是private attribute,因此它的名称是“mangled”,这就是名称更改的原因。你知道吗这个问题与unittest无关,只是您试图访问一个私有属性。你知道吗
要解决您的问题,请删除
__eventDict
名称开头的一个(或两个)下划线以使其受保护(或公开)。你知道吗相关问题 更多 >
编程相关推荐