Testcode generieren

In der Initialisierungsphase einer Anforderung zur Codegenerierung wird ein Objekt erstellt, das die Klasse LTTestExtensionPreferences erweitert. Dazu werden alle Plug-ins aufgerufen, die den Erweiterungspunkt com.ibm.rational.test.lt.codegen.core.codegenProtocolExtension mithilfe der Methode supportFeatures() implementieren.

Informationen zu diesem Vorgang

Über die Methode supportFeatures()method wird die Liste der Funktionen des Testmodellobjekts abgerufen. Wird dabei festgestellt, dass die vorliegenden Funktionen unterstützt werden, wird das entsprechende Objekt des Typs LTTestExtensionPreferences zurückgemeldet. Durch das zurückgemeldete Objekt wird die Schnittstelle com.ibm.rational.test.lt.codegen.core.config.IExtensionPreferences implementiert, bei der es sich um den allgemein zugänglichen Teil der Klasse LTTestExtensionPreferences handelt.

Die Codegenerierung wird über die Klasse com.ibm.rational.test.lt.codegen.core.CodeGenerator gesteuert. Diese Klasse arbeitet mit einem Objekt des Typs EclipseCodegenConfiguration, in der die Hashtabellen für Übersetzer, die Modellelementadapter sowie die nach Sprachelementtyp eingegebenen Schablonen gespeichert werden. Für die Containertestelemente, die Datenpools sowie einige andere unabhängige protokollrelevante Elemente sind eigene Übersetzer definiert. Elemente, die nicht separat existieren können, werden als untergeordnete Elemente der Elemente übersetzt, in denen sie enthalten sind. Dazu wird die Übersetzermethode translateChildren() aufgerufen.

Vom Codegenerator wird der passende Übersetzer bestimmt und anschließend wird für das betreffende Modellelement die Methode getTranslationFor() aufgerufen.

Über die Klasse ElementAdapter und die Methode getAdapterForType() wird für das betreffende Verhaltensmodellelement das erforderliche Modellelement für die Codegenerierung bestimmt.

Vorgehensweise

Zum Übersetzen von Testelementen gehören die folgenden Schritte:

  1. Die Testelemente werden aus dem Verhaltensmodell ausgelesen und für jedes der Elemente wird der passende Übersetzer bestimmt.
  2. Für das Element wird das Sprachelementobjekt erstellt und die passende Schablone wird bestimmt.
  3. Die Elementattribute werden aus dem Modell ausgelesen und in der Schablone werden die entsprechenden Parameter eingesetzt.

Ergebnisse

Die Generierung der Codesprachelemente ist rekursiv. Dabei wird ein Sprachelementbaum mit allen Ebenen von Testelementen des Ausführungsmodells generiert. Jedes dieser Elemente enthält das instanziierte Schablonenobjekt mit allen angeforderten Testsubstitutionen. Der genannte Baum wird implementiert, indem als Knoten die Sprachelementcontainer verwendet werden. Die Schablonensubstitutionen für die Sprachelementcontainer für Parameter zum Definieren mehrerer Elements werden von der Klasse LangElemCollectionValue verarbeitet.

Feedback