robotframework:在 class 中定义可用关键字
robotframework: define available keywords in a class
我有一个库作为模块中的 class 实现:
MyLib.py
class MyLib(ParentLib):
def __init__(self):
#do stuff
pass
def keyword(self, arg1):
robot.api.logger.console('keyword')
ParentLib.py
class ParentLib:
def __init__(self):
pass
def parent_keyword(self, arg):
robot.api.logger.console('parent keyword')
我可以毫无问题地导入这个库 Library MyLib
。这似乎违反直觉,但我想阻止 MyLib 提供 Parent Keyword
。即,如果用户想要 Parent Keyword
,我希望他们被迫使用 Library ParentLib
手动导入它。这可能吗,还是我需要重新组织我的库的实现方式?
您可以定义方法 get_keyword_names
来明确定义哪些关键字暴露给测试:
class MyLib(ParentLib):
...
def get_keyword_names(self):
return ["keyword"]
机器人框架用户指南将此称为 hybrid library。
就我个人而言,我会反对这一点。正如您在问题中所说,这是违反直觉的。
如果你想使用关键字库来共享一些公共代码,可以说让 MyLib
和 ParentLib
从一个公共基础继承比让一个从另一个继承更好隐藏继承的功能。如果你要隐藏功能,为什么要继承它?
我有一个库作为模块中的 class 实现:
MyLib.py
class MyLib(ParentLib):
def __init__(self):
#do stuff
pass
def keyword(self, arg1):
robot.api.logger.console('keyword')
ParentLib.py
class ParentLib:
def __init__(self):
pass
def parent_keyword(self, arg):
robot.api.logger.console('parent keyword')
我可以毫无问题地导入这个库 Library MyLib
。这似乎违反直觉,但我想阻止 MyLib 提供 Parent Keyword
。即,如果用户想要 Parent Keyword
,我希望他们被迫使用 Library ParentLib
手动导入它。这可能吗,还是我需要重新组织我的库的实现方式?
您可以定义方法 get_keyword_names
来明确定义哪些关键字暴露给测试:
class MyLib(ParentLib):
...
def get_keyword_names(self):
return ["keyword"]
机器人框架用户指南将此称为 hybrid library。
就我个人而言,我会反对这一点。正如您在问题中所说,这是违反直觉的。
如果你想使用关键字库来共享一些公共代码,可以说让 MyLib
和 ParentLib
从一个公共基础继承比让一个从另一个继承更好隐藏继承的功能。如果你要隐藏功能,为什么要继承它?