2016-04-05 5 views
1

Ich habe eine Bibliothek als eine Klasse in einem Modul implementiert:Robot Framework: define verfügbaren Schlüsselwörter in einer Klasse

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') 

Ich kann diese Bibliothek ohne Problem mit Library MyLib importieren. Dies scheint nicht intuitiv zu sein, aber ich möchte verhindern, dass MyLib Parent Keyword bereitstellt. Wenn ein Benutzer Parent Keyword möchte, möchte ich, dass er manuell mit Library ParentLib importiert werden muss. Ist das möglich, oder muss ich die Art und Weise, wie meine Bibliothek implementiert wird, neu organisieren?

+0

parent_keyword wird von allen ParentLib-Unterklassen geerbt. Wenn Sie es verhindern möchten, unterlassen Sie es nicht oder überschreiben Eltern-Schlüsselwort in Ihrer Unterklasse –

+0

@Apero ich weiß. Ich frage mich, ob robot eine Methode zur Verfügung stellt, um zu definieren, welche Klassenmethode Schlüsselwörter sind und welche nicht, ähnlich der Verwendung von '__all__', wenn sie ohne Klasse definiert werden. (Ich weiß, dass '__all__' in Python-Funktionalität für Module eingebaut ist.) – ewok

+0

__alll__ kann hier nicht helfen. parent_keyword ist eine Methode einer Klasse. Wenn also die Klasse importiert werden kann, kommen ihre Methoden hinzu. –

Antwort

3

können Sie die Methode definieren get_keyword_names explizit definieren, welche zum Test erhalten ausgesetzt Schlagworte:

class MyLib(ParentLib): 
    ... 
    def get_keyword_names(self): 
     return ["keyword"] 

Der Roboter Framework Benutzerhandbuch nennt dies eine hybrid library.

Persönlich würde ich dagegen argumentieren. Wie Sie in der Frage gesagt haben, ist dies kontraintuitiv.

Wenn Sie möchten, dass Schlüsselwortbibliotheken einige gemeinsamen Code freigeben, wäre es wohl besser, beide MyLib und ParentLib von einer gemeinsamen Basis zu erben, als eine von der anderen zu erben, während die vererbten Funktionen zu verbergen. Wenn Sie die Funktionen verbergen, warum erben Sie davon?

+0

Wenn ich 'get_keyword_names' ohne 'get_keyword_documentation',' get_keyword_arguments' und 'run_keyword' definiere, wird es sich dann immer noch korrekt verhalten? Und um deine Frage zu beantworten, habe ich keine Ahnung. Ich habe es nicht geschrieben. Wir versuchen herauszufinden, ob wir damit arbeiten können, oder wir müssen die Zeit für die Reorganisation der Bibliothek aufwenden. – ewok

+1

@ewok: Die Antwort auf Ihre Frage finden Sie im Benutzerhandbuch: _ "Wenn diese API verwendet wird, verwendet Robot Framework die Methode zum Implementieren von Schlüsselwörtern mithilfe von Reflection, ähnlich wie bei der statischen API. Nachdem Sie eine Referenz auf die Methode erhalten haben sucht wie bei der Verwendung der statischen API nach Argumenten und Dokumentationen, so dass keine speziellen Methoden zum Abrufen von Argumenten und Dokumentation benötigt werden, wie dies bei der dynamischen API der Fall ist. "_ –

Verwandte Themen