值类是包含可用于交互的数据的 Java™ 或 .Net 类。值类的实例可持久存在,并且可与同一类中的其他实例进行比较。这是所有值类的基本功能。
此示例代码显示了 Java 值类:
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+")"; } }
此示例代码显示了 .Net 值类:
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+")"; } } }
值管理器与值类进行交互,这样可以对值类对象进行序列化和比较处理并使值类对象持久存在。值管理器类可以动态添加到受支持管理的集合。在注册新管理器后,新支持的值类的属性会自动表述在与测试对象相关联的属性集合中。
此示例代码显示了 Java 值管理器:
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; } }
此示例代码显示了 .Net 值管理器:
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; } } }