### Question:
ObjAttribute extends Attribute implements ConfigurationNode { public ObjAttribute getClientAttribute() { ClientObjAttribute attribute = new ClientObjAttribute(getName()); attribute.setType(getType()); DbAttribute dbAttribute = getDbAttribute(); if (dbAttribute != null) { if (dbAttribute.isPrimaryKey()) { attribute.setDbAttributePath(dbAttribute.getName()); attribute.setPrimaryKey(true); } attribute.setMandatory(isMandatory()); attribute.setMaxLength(getMaxLength()); } return attribute; } ObjAttribute();  ObjAttribute(String name);  ObjAttribute(String name, String type, ObjEntity entity);  ObjAttribute(ObjAttribute attribute); @Override ObjEntity getEntity(); T acceptVisitor(ConfigurationNodeVisitor<T> visitor); Class<?> getJavaClass(); @Override void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate); String getType(); void setType(String type); boolean isPrimaryKey(); boolean isUsedForLocking(); void setUsedForLocking(boolean usedForLocking); boolean isLazy(); void setLazy(boolean lazy); DbAttribute getDbAttribute(); boolean isInherited(); Iterator<CayenneMapEntry> getDbPathIterator(); @SuppressWarnings("unchecked") Iterator<CayenneMapEntry> getDbPathIterator(ObjEntity entity); String getDbAttributeName(); void setDbAttributePath(String dbAttributePath); String getDbAttributePath(); boolean isFlattened(); boolean isMandatory(); int getMaxLength(); ObjAttribute getClientAttribute(); void updateDbAttributePath(); @Override String toString();  }### Answer:
@Test public void testGetClientAttribute() { ObjAttribute a1 = new ObjAttribute("a1"); a1.setType("x.y.z"); ObjAttribute a2 = a1.getClientAttribute(); assertNotNull(a2); assertEquals(a1.getName(), a2.getName()); assertEquals(a1.getType(), a2.getType()); }