@Test
  void equalsHashCodeAndToStringWork() {
    final Target<TestInterfaceAsync> t1 =
        new HardCodedTarget<>(TestInterfaceAsync.class, "http://localhost:8080");
    final Target<TestInterfaceAsync> t2 =
        new HardCodedTarget<>(TestInterfaceAsync.class, "http://localhost:8888");
    final Target<OtherTestInterfaceAsync> t3 =
        new HardCodedTarget<>(OtherTestInterfaceAsync.class, "http://localhost:8080");
    final TestInterfaceAsync i1 = newAsyncBuilder().target(t1);
    final TestInterfaceAsync i2 = newAsyncBuilder().target(t1);
    final TestInterfaceAsync i3 = newAsyncBuilder().target(t2);
    final OtherTestInterfaceAsync i4 = newAsyncBuilder().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());
  }
The type of a parameter value may not be the desired type to encode as. Prefer the interface
type.
okhttp/src/test/java/feign/okhttp/OkHttpClientAsyncTest.java