python unittest不允许对象属性引用

2024-09-27 07:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试在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属性来自哪里?这不是我调用的属性,它阻止我运行单元测试。你知道吗


Tags: selfinitdefunittestthreadclassthreadingeventmanager
1条回答
网友
1楼 · 发布于 2024-09-27 07:30:40

由于__eventDict以两个下划线开头,它是private attribute,因此它的名称是“mangled”,这就是名称更改的原因。你知道吗

这个问题与unittest无关,只是您试图访问一个私有属性。你知道吗

要解决您的问题,请删除__eventDict名称开头的一个(或两个)下划线以使其受保护(或公开)。你知道吗

相关问题 更多 >

    热门问题