Sie können erweiterbare Komponenten wie Proxys, Testobjekte, Werte und Wertemanager in einer externen Anpassungsdatei (mit der Erweiterung .rftcust) angeben. Nach Implementierung der Dateien werden diese erweiterten Komponenten Bestandteil des Functional Tester-Frameworks. Die Hauptanpassungsdatei, rational_ft.rftcust, befindet sich im Functional Tester-Installationsverzeichnis oder im Anpassungsverzeichnis.
Sie können viele Anpassungsdateien erstellen. Beim Start liest Functional Tester alle Anpassungsdateien und speichert die Details im gemeinsam genutzten Speicher. Weitere Verweise auf die Anpassungsdateien erfolgen im gemeinsam genutzten Speicher.
Bei der Anpassungsdatei handelt es sich um eine XML-Datei mit vielen Abschnitten, die mit den Tags <Section></Section> gekennzeichnet sind. Jeder Abschnitt hat einen Namen; der Inhalt steht zwischen den Tags. Das folgende Beispiel gibt einen Standardabschnitt wieder:
<Section L=".ConfigFileSection"> <Name>Section Name</Name> . . Section content . </Section >
Abschnitte sind optional; in eine Anpassungsdatei können auch leere Abschnitte eingefügt werden. Jeder Abschnitt weist eine eigene Syntax auf. Abschnittskomponenten, die in beiden Komponentenmodellen (Java und .NET) zu implementieren sind, müssen zwei <ComponentModel>-Tags enthalten - jeweils einen Tag für Java und .NET:
<ComponentModel L=".ComponentModel"> <Name>Java</Name> </ComponentModel> <ComponentModel L=".ComponentModel"> <Name>Net</Name> </ComponentModel>
Bei proxies handelt es sich um den am häufigsten verwendeten Abschnitt. Er enthält einen <DomainImplementation>-Tag für jede Testdomäne zur Angabe der implementierten Proxyklassen sowie der Klassennamen der zugeordneten zu testenden Anwendung, für die der Proxy verwendet wird. Im <DomainImplementation>-Tag werden die <Obj L=".Proxy">-Tags für jede eingerichtete Proxyklasse verwendet. Die <UsedBy>-Tags geben den Klassennamen des Steuerelements für die zu testende Anwendung an.
Eine einzige Proxyklasse kann mehrere <UsedBy>-Tags aufweisen, wenn derselbe Proxy für ähnliche Steuerelemente verwendet werden soll.
Sie müssen die <Section>-Tags entsprechend verwenden, die mit den Anforderungen und Erweiterungskomponenten übereinstimmen, die im Functional Tester-Framework implementiert werden müssen.
Das folgende Codemuster gibt die vollständige Syntax für die Hauptanpassungsdatei wieder.
<?xml version="1.0" encoding="UTF-8"?> <ConfigFile L=".ConfigFile"> <--Proxy Section: all the proxies are defined here domain wise--> <Section L=".ConfigFileSection"> <Name>proxies</Name> <Val L=".ProxyManager"> <DomainImplementation L=".DomainImplementation"> <Name>Java</Name> <Obj L=".Proxy"> <ClassName></ClassName> <Replaces/> <UsedBy></UsedBy> . . </Obj> . . </DomainImplementation> <DomainImplementation L=".DomainImplementation"> <Name>Net</Name> <Obj L=".Proxy"> <ClassName></ClassName> <Replaces/> <UsedBy></UsedBy> . . </Obj> . . </DomainImplementation> <DomainImplementation L=".DomainImplementation"> <Name>Win</Name> <Obj L=".Proxy"> <ClassName></ClassName> <Replaces/> <UsedBy></UsedBy> . . </Obj> . . </DomainImplementation> . . </Val> </Section> <--ValueManager Section: all newly defined Value and Valuemanager classes are defined here --> <Section L=".ConfigFileSection"> <Name>valueManagers</Name> <Val L=".ValueManagerManager"> <ComponentModel L=".ComponentModel"> <Name>Java</Name> <Obj L=".ValueManager"> <Id></Id> <ValueClass></ValueClass> <Manager></Manager> </Obj> </ComponentModel> <ComponentModel L=".ComponentModel"> <Name>Net</Name> <Obj L=".ValueManager"> <Id></Id> <ValueClass></ValueClass> <Manager></Manager> </Obj> </ComponentModel> </Val> </Section> <--Value Converter Section: --> <Section L=".ConfigFileSection"> <Name>valueConverters</Name> <Val L=".ValueConverterManager"> </Val> </Section> <--Property Converter Section: --> <Section L=".ConfigFileSection"> <Name>propertyConverters</Name> <Val L=".PropertyConverterManager"> <ComponentModel L=".ComponentModel"> <Name>Java</Name> <Obj L=".PropertyConverter"> <Property></Property> <Converter></Converter> </Obj> </ComponentModel> <ComponentModel L=".ComponentModel"> <Name>Net</Name> <Obj L=".PropertyConverter"> <Property></Property> <Converter></Converter> </Obj> </ComponentModel> </Val> </Section> <--Options Converter Section: --> <Section L=".ConfigFileSection"> <Name>options</Name> <Val L=".Options"> <Obj L=".Option"> <Name></Name> <Type></Type> <ReadOnly></ReadOnly> <DefaultValue/> <Description></Description> <Label/> <Category></Category> <LegalValues/> </Obj> </Val> </Section> <-- RoleMap Section: --> <Section L=".ConfigFileSection"> <Name>roleMap</Name> <Val L=".RoleMap"> <Role L=".Role"> <Name></Name> <Icon></Icon> </Role> </Val> </Section> <--TestObject Section: canonical name for all the newly created testobjects defined here --> <Section L=".ConfigFileSection"> <Name>testObjects</Name> <Val L=".TestObjectManager"> <ComponentModel L=".ComponentModel"> <Name>Java</Name> <Obj L=".TestObject"> <CanonicalName></CanonicalName> <TestObject></TestObject> </Obj> . . </ComponentModel> <ComponentModel L=".ComponentModel"> <Name>Net</Name> <Obj L=".TestObject"> <CanonicalName></CanonicalName> <TestObject></TestObject> </Obj> . . </ComponentModel> </Val> </Section> </ConfigFile>