繁体   English   中英

Robot Framework:无法使用__eq__方法从类中获取关键字

[英]Robot Framework : Unable to get keywords from class with __eq__ method

如果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'

我想了解这是否是对机器人框架的不支持使用,如果是这样,是否有建议的解决方案来重写/修改被测试的类以避免此错误。

通过调试器执行机器人框架代码,我看到错误是来自该方法_get_handler_method在类_ClassLibrary始发(在文件testlibraries.py)。 作为机器人框架的新手,我不知道如何解决这个问题。

任何建议都会有很大的帮助!!

你的__eq__方法有问题。 您的实现假定实例仅与另一个实例进行比较,但可以将其与任何实例进行比较。 例如,如果将实例与字符串进行比较,则函数将抛出错误,因为字符串没有arg1属性。

一个简单的解决方法是检查两个对象是否属于同一类型,另外还要检查它们的属性:

def __eq__(self, other):
    return (isinstance(other, self.__class__) and
            self.arg1 == other.arg1 and
            self.arg2 == other.arg2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM