@SuppressWarnings("unchecked")
  @BeforeClass
  public static void beforeClass() {
    writeOnlyCodec = Mockito.mock(ITransferCodec.class);
    Mockito.when(
            writeOnlyCodec.isSerilizationSupported(
                Mockito.any(Class.class), Mockito.any(ITransferType.class.getClass())))
        .thenReturn(false);
    Mockito.when(writeOnlyCodec.isSerilizationSupported(Object.class, IJsonTransferType.class))
        .thenReturn(true);
    Mockito.when(
            writeOnlyCodec.isDeserilizationSupported(
                Mockito.any(Class.class), Mockito.any(ITransferType.class.getClass())))
        .thenReturn(false);

    readOnlyCodec = Mockito.mock(ITransferCodec.class);
    Mockito.when(
            readOnlyCodec.isDeserilizationSupported(
                Mockito.any(Class.class), Mockito.any(ITransferType.class.getClass())))
        .thenReturn(false);
    Mockito.when(readOnlyCodec.isDeserilizationSupported(Object.class, IJsonTransferType.class))
        .thenReturn(true);
    Mockito.when(
            readOnlyCodec.isSerilizationSupported(
                Mockito.any(Class.class), Mockito.any(ITransferType.class.getClass())))
        .thenReturn(false);

    TransferCodecRegistry.instance().registerCodec(readOnlyCodec);
    TransferCodecRegistry.instance().registerCodec(writeOnlyCodec);
  }
  @Test
  public void writeSupportedType() throws IOException {
    Assert.assertTrue(
        TransferCodecRegistry.instance().canSerialize(Object.class, IJsonTransferType.class));

    ITransferSerializer<Object> serializer =
        TransferCodecRegistry.instance().serializerForType(testObject, IJsonTransferType.class);
    Assert.assertNotNull(serializer);

    serializer.serialize(baos);
    Mockito.verify(writeOnlyCodec).serializeObject(testObject, baos, IJsonTransferType.class);
  }
  @Test
  public void readSupportedType() throws IOException {
    Assert.assertTrue(
        TransferCodecRegistry.instance().canDeserialize(Object.class, IJsonTransferType.class));

    ITransferDeserializer<Object> serializer =
        TransferCodecRegistry.instance().deserializerForType(Object.class, IJsonTransferType.class);
    Assert.assertNotNull(serializer);

    Object o = serializer.deserialize(bais);
    Assert.assertEquals(inputObject, o);
    Mockito.verify(readOnlyCodec).deserializeObject(bais, IJsonTransferType.class);
  }
  @Test
  public void writeUnsupportedType() {
    Assert.assertFalse(
        TransferCodecRegistry.instance().canSerialize(Object.class, ITransferType.class));
    Assert.assertFalse(
        TransferCodecRegistry.instance()
            .canSerialize(Object.class, IWWWUrlFormEncodedTransferType.class));
    Assert.assertFalse(
        TransferCodecRegistry.instance().canSerialize(String.class, IJsonTransferType.class));

    Assert.assertNull(
        TransferCodecRegistry.instance().serializerForType(Object.class, ITransferType.class));
    Assert.assertNull(
        TransferCodecRegistry.instance()
            .serializerForType(Object.class, IWWWUrlFormEncodedTransferType.class));
    Assert.assertNull(
        TransferCodecRegistry.instance().serializerForType(String.class, IJsonTransferType.class));
  }