首页 > 解决方案 > 为什么我的自我实例没有在方法中传递

问题描述

我有以下代码。ResourceManagerSuspension 类继承自 TestCase 类。TestCase 按字母顺序执行测试 像 testA 这样的方法将在 testB 之前执行。所以 testLinkData 方法在 testSuspension 和 self.link 在 testLinkData 中获取它的值之前执行。我正在初始化一个变量“self.link”,当方法 testSuspension 被执行时,它调用 getQueryValues。

我的问题是为什么

“self.link”没有在 getQueryValues 方法中传递?谁能解释一下自我机制是如何在这里工作的,也许我做错了什么?

class ResourceManagerSuspension(TestCase):
    @classmethod
    def setUpClass(self):
        logger.info("=== Starting setup ===")
       # self.rm_obj = ResourceManager(agg='mapper-prefix1-aggs.A.m2-test.akamai.com')
        self.rm_obj = ResourceManager()
        self.rm_leader = self.rm_obj.get_rm_leader() 
        logger.info("RM lead target is %s" % (self.rm_leader))
        self.found = "" 
        self.link = ""  
        logger.info("self.link is : {}".format(self.link))
        logger.info("self in setUpClass is : {}".format(self.__dict__))         

    #the name should be get link number to get started etc
    def testLinkData(self):
        linkValues = {} 
        #get a random link  
        sqlquery = "select * from rm_links_debugonly where adjuster_reason not like '\%suspend\%' and ip=" + self.rm_leader + " and link!=0 limit 1"
        link_obj = self.rm_obj.get_link_info(query=sqlquery) 
        for row in link_obj:
            self.link = row.link
        self.getDynamicConfig()
        logger.info("self.link is : {}".format(self.link))
        logger.info("self in testLinkData is : {}".format(self.__dict__))

    def testSuspension(self):
        if not ResourceManagerSuspension.found:
            #get the 'control_reason' from "rm_link_load_control_debugonly" and 'adjuster_cap' from "rm_links_debugonly" before submitting the dynamic config 
            self.control_reason_without_config, self.adjuster_cap_without_config = self.getQueryValues()

            logger.info("param not present in the file, submitting with the param")
            self.rm_obj.dyamic_config_submit(fromLocation = self.rm_obj.dynamic_config_modified, to = self.rm_obj.dynamic_config_incoming)


       else:
           logger.info("param is already present, removing it and submitting the config")
           self.rm_obj.dyamic_config_submit(fromLocation = self.rm_obj.dynamic_config_modified, to = self.rm_obj.dynamic_config_incoming)
          logger.info("self.link is : {}".format(self.link))
          logger.info("self in testSuspension is : {}".format(self.__dict__))

    def getQueryValues(self):
       logger.info("self in getQueryValues is : {}".format(self.__dict__))
       logger.info("self.link is : {}".format(self.link))

代码最后一行的输出是

[05:55:39.709 test_suspension_2:  61  I] self.link is : 

标签: pythonpython-3.x

解决方案


单元测试应该能够彼此独立运行,这意味着getQueryValues应该能够在之前或之后运行testLinkData,但在您的实现中,getQueryValues必须在之后运行testLinkData才能获得您期望的输出。

要解决这个问题,您必须编写设置实用程序方法,您的测试方法可以在它们运行时调用,即给出self.link一个独立于另一个测试的值。


推荐阅读