python - 为什么我的自我实例没有在方法中传递
问题描述
我有以下代码。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 :
解决方案
单元测试应该能够彼此独立运行,这意味着getQueryValues
应该能够在之前或之后运行testLinkData
,但在您的实现中,getQueryValues
必须在之后运行testLinkData
才能获得您期望的输出。
要解决这个问题,您必须编写设置实用程序方法,您的测试方法可以在它们运行时调用,即给出self.link
一个独立于另一个测试的值。
推荐阅读
- mysql - Django RF 和 Gunicorn - 响应时间的异常行为
- azure - Azure Key Vault access policies and Managed Identities (ARM templates)
- javascript - UseSelector 返回未定义
- postgresql - 在 postgres 中创建仅具有查看权限的用户
- python - lxml - 从输入文件向元素添加命名空间
- python - 从高斯拟合返回值
- python - 在 Python 中比较两个数据框的最经济的方法
- java - 问题格式化 XMLGregorianCalendar - IllegalArgumentException
- reactjs - Redux 问题:调度 redux 操作以加载或更新我的表时,我看到显示的旧数据集合附加新数据
- sql - 有没有办法在 Amazon Athena 上查询选择用户名?