如果python类包含 __ eq __ 方法,则机器人框架无法从类中获取关键字(如果 __ eq __ 方法被注释掉,测试将运行并通过)。例如,如果我的Python类(在 TestClass.py 中实现)是
class TestClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def get_arg1(self):
return self.arg1
def get_arg2(self):
return self.arg2
def __eq__(self, other):
return self.arg1 == other.arg1 and self.arg2 == other.arg2
我的机器人文件( TestClass.robot )是
*** Settings ***
Library TestClass 1 2 WITH NAME First_Lib
*** Variables ***
*** Test Cases ***
MyTest1
${result}= First_Lib.get arg1
Should be equal as integers ${result} 1
MyTest2
${result}= First_Lib.get arg2
Should be equal as integers ${result} 2
运行 robot v3.0.2 时,我看到以下错误消息。
[ ERROR ] Error in file 'TestClass.robot': Getting keyword names from library 'TestClass' failed: AttributeError: type object 'object' has no attribute 'arg1'
我想了解这是否是对机器人框架的不支持使用,如果是这样,是否有建议的解决方案来重写/修改被测试的类以避免此错误。
通过调试器执行机器人框架代码,我发现错误来自 _ClassLibrary 类中的方法 _get_handler_method (在文件 testlibraries中的.py )。作为机器人框架的新手,我不知道如何解决这个问题。
任何建议都会有很大的帮助!!
答案 0 :(得分:2)
您的__eq__
方法有问题。您的实现假定实例仅与另一个实例进行比较,但可以将其与任何实例进行比较。例如,如果将实例与字符串进行比较,则函数将抛出错误,因为字符串没有arg1
属性。
一个简单的解决方法是检查两个对象是否属于同一类型,并检查其属性:
def __eq__(self, other):
return (isinstance(other, self.__class__) and
self.arg1 == other.arg1 and
self.arg2 == other.arg2)