### Question:
ConsumedThing extends Thing<ConsumedThingProperty<Object>, ConsumedThingAction<Object, Object>, ConsumedThingEvent<Object>> { @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { return false; } ConsumedThing that = (ConsumedThing) o; return Objects.equals(servient, that.servient); } ConsumedThing(Servient servient, Thing thing); Pair<ProtocolClient, Form> getClientFor(Form form,
                                                   Operation op); Pair<ProtocolClient, Form> getClientFor(List<Form> forms,
                                                   Operation op); CompletableFuture<Map<String, Object>> readProperties(String... names); CompletableFuture<Map<String, Object>> readProperties(List<String> names); CompletableFuture<Map<String, Object>> readProperties(); @Override int hashCode(); @Override boolean equals(Object o); @Override String toString(); static Form handleUriVariables(Form form, Map<String, Object> parameters);  }### Answer:
@Test public void testEquals() { ConsumedThing thingA = new ConsumedThing(null, new Thing.Builder().setId("counter").build()); ConsumedThing thingB = new ConsumedThing(null, new Thing.Builder().setId("counter").build()); assertEquals(thingA, thingB); }