@Test
public void equalsHashCodeAndToStringWork() {

  Target<TestInterfaceAsync> t1 =
      new HardCodedTarget<TestInterfaceAsync>(TestInterfaceAsync.class,
          "http://localhost:8080");
  Target<TestInterfaceAsync> t2 =
      new HardCodedTarget<TestInterfaceAsync>(TestInterfaceAsync.class,
          "http://localhost:8888");
  Target<OtherTestInterfaceAsync> t3 =
      new HardCodedTarget<OtherTestInterfaceAsync>(OtherTestInterfaceAsync.class,
          "http://localhost:8080");
  TestInterfaceAsync i1 = AsyncFeign.asyncBuilder().target(t1);
  TestInterfaceAsync i2 = AsyncFeign.asyncBuilder().target(t1);
  TestInterfaceAsync i3 = AsyncFeign.asyncBuilder().target(t2);
  OtherTestInterfaceAsync i4 = AsyncFeign.asyncBuilder().target(t3);
  assertThat(i1).isEqualTo(i2).isNotEqualTo(i3).isNotEqualTo(i4);
  assertThat(i1.hashCode()).isEqualTo(i2.hashCode()).isNotEqualTo(i3.hashCode())
      .isNotEqualTo(i4.hashCode());
  assertThat(i1.toString()).isEqualTo(i2.toString()).isNotEqualTo(i3.toString())
      .isNotEqualTo(i4.toString());
  assertThat(t1).isNotEqualTo(i1);
  assertThat(t1.hashCode()).isEqualTo(i1.hashCode());
  assertThat(t1.toString()).isEqualTo(i1.toString());
}