Die folgenden Codebeispiele zeigen verschiedene Werteklassen und Wertemanager.
Bei einer Werteklasse handelt es sich um eine Java- oder .NET-Klasse mit Daten, die speziell für Interaktionen hilfreich sind. Eine Instanz einer Werteklasse kann bestehen bleiben und mit anderen Instanzen derselben Klasse verglichen werden. Dies ist eine grundlegende Funktion aller Werteklassen.
Dieser Mustercode zeigt eine Java-Werteklasse:
package sdk.sample.value; public class SimpleValue { String data = null; public SimpleValue(String data) { this.data = data; } public String getValue() { return this.data; } public String toString() { return "SimpleValue("+data+")"; } }
Dieser Mustercode zeigt eine .NET-Werteklasse:
using System; namespace SDK.Sample.Value { public class SimpleValue { private String data = null; public SimpleValue(String data) { this.data = data; } public String GetValue() { return this.data; } public override String ToString() { return "SimpleValue("+data+")"; } } }
Wertemanager interagieren mit Werteklassen, so dass Werteklassenobjekte serialisiert, verglichen und als permanent definiert werden können. Wertemanagerklassen können der Gruppe unterstützter Manager dynamisch hinzugefügt werden. Nachdem ein neuer Manager registriert wurde, wird jede beliebige Eigenschaft der neu unterstützten Werteklasse automatisch in der Gruppe der einem Testobjekt zugeordneten Eigenschaften als Ausdruck dargestellt.
Dieser Mustercode zeigt einen Java-Wertemanager:
package sdk.sample.value; import com.rational.test.ft.value.managers.*; public class SimpleValueManager implements IManageValueClass, IStringTableLookup { private static final String CLASSNAME = "sdk.sample.value.SimpleValue"; private static final String CANONICALNAME = ".simple_value"; private static final String DATA = "Data"; public void persistOut(Object theObject, IPersistOut persist, IAuxiliaryDataManager auxData) { SimpleValue simple = (SimpleValue)theObject; persist.write(DATA, simple.getValue()); } public Object persistIn(IPersistIn persist, IAuxiliaryDataManager auxData) { String data = (String)persist.read(0); return new SimpleValue(data); } public Object persistIn(IPersistInNamed persist, IAuxiliaryDataManager auxData) { String data = (String)persist.read(DATA); return new SimpleValue(data); } public int compare(Object left, Object right, ICompareValueClass nested) { if ( left == null || right == null ) return ( left == right ? 100 : 0 ); if ( !(right instanceof SimpleValue) ) return 0; SimpleValue l = (SimpleValue)left; SimpleValue r = (SimpleValue)right; return ( l.equals(r) ? 100 : 0 ); } public Object createValue(Object sourceToCopy) { if ( sourceToCopy instanceof SimpleValue ) return new SimpleValue(((SimpleValue)sourceToCopy).getValue()); return null; } public String getCanonicalName() { return CANONICALNAME; } public String getClassName() { return CLASSNAME; } public String doLookup(Object lookup) { String retVal = null; if (lookup instanceof SimpleValue && lookup != null) { retVal = com.rational.test.ft.services.StringTableService.getString( ((SimpleValue)lookup).getValue()); // If they are the same return null so we won't bother changing VP data, etc. if (retVal == ((SimpleValue)lookup).getValue()) { retVal = null; } } return retVal; } }
Dieser Mustercode zeigt einen .NET-Wertemanager:
using System; using Rational.Test.Ft.Value.Managers; namespace SDK.Sample.Value { public class SimpleValueManager: IManageValueClass { private const System.String CLASSNAME = "SDK.Sample.Value.SimpleValue"; private const System.String CANONICALNAME = ".simpe_value"; private const System.String DATA = "Data"; public virtual void PersistOut(System.Object theObject, IPersistOut persist, IAuxiliaryDataManager auxData) { SimpleValue simple = (SimpleValue)theObject; persist.Write(DATA, simple.GetValue()); } public virtual System.Object PersistIn(IPersistIn persist, IAuxiliaryDataManager auxData) { String data = (String)persist.Read(0); return new SimpleValue(data); } public virtual System.Object PersistIn(IPersistInNamed persist, IAuxiliaryDataManager auxData) { String data = (String)persist.Read(DATA); return new SimpleValue(data); } public virtual int Compare(System.Object left, System.Object right, ICompareValueClass nested) { if ( left == null || right == null ) return ( left == right ? 100 : 0 ); if ( !(right is SimpleValue) ) return 0; SimpleValue l = (SimpleValue)left; SimpleValue r = (SimpleValue)right; return ( l.Equals(r) ? 100 : 0 ); } public virtual System.Object CreateValue(System.Object sourceToCopy) { if ( sourceToCopy is SimpleValue ) return new SimpleValue(((SimpleValue)sourceToCopy).GetValue()); return null; } public virtual System.String GetCanonicalName() { return CANONICALNAME; } public virtual System.String GetClassName() { return CLASSNAME; } } }