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

就我个人而言,我会反对这一点。正如您在问题中所说,这是违反直觉的。

如果你想使用关键字库来共享一些公共代码,可以说让 MyLibParentLib 从一个公共基础继承比让一个从另一个继承更好隐藏继承的功能。如果你要隐藏功能,为什么要继承它?