¿Cómo simular un cliente WCF usando Moq?

En mi proyecto estoy usando: SL5 + MVVM + Prism + WCF + Rx + Moq + Silverlight Framework de prueba de unidades.

Soy nuevo en las pruebas unitarias y he comenzado recientemente con DI, Patrones (MVVM), etc. Por lo tanto, el siguiente código tiene muchas posibilidades de mejora (por favor, siéntase libre de rechazar todo el enfoque que estoy tomando si lo cree).

Para acceder a mis servicios de WCF, he creado una clase de fábrica como la siguiente (nuevamente, puede tener fallas, pero por favor, eche un vistazo):

namespace SomeSolution
{
    public class ServiceClientFactory:IServiceClientFactory
    {
        public CourseServiceClient GetCourseServiceClient()
        {
            var client = new CourseServiceClient();
            client.ChannelFactory.Faulted += (s, e) => client.Abort();
            if(client.State== CommunicationState.Closed){client.InnerChannel.Open();}
            return client;
        }

        public ConfigServiceClient GetConfigServiceClient()
        {
            var client = new ConfigServiceClient();
            client.ChannelFactory.Faulted += (s, e) => client.Abort();
            if (client.State == CommunicationState.Closed) { client.InnerChannel.Open(); }
            return client;
        }

        public ContactServiceClient GetContactServiceClient()
        {
            var client = new ContactServiceClient();
            client.ChannelFactory.Faulted += (s, e) => client.Abort();
            if (client.State == CommunicationState.Closed) { client.InnerChannel.Open(); }
            return client;
        }
    }
}

Implementa una interfaz simple como la siguiente:

public interface IServiceClientFactory
{
    CourseServiceClient GetCourseServiceClient();
    ConfigServiceClient GetConfigServiceClient();
    ContactServiceClient GetContactServiceClient();
}

En mis máquinas virtuales, estoy haciendo DI de la clase anterior y uso Rx para llamar a WCF de la siguiente manera:

var client = _serviceClientFactory.GetContactServiceClient();
try
{

    IObservable<IEvent<GetContactByIdCompletedEventArgs>> observable =
        Observable.FromEvent<GetContactByIdCompletedEventArgs>(client, "GetContactByIdCompleted").Take(1);

    observable.Subscribe(
        e =>
            {
                if (e.EventArgs.Error == null)
                {                                    
                    //some code here that needs to be unit-tested

                }
            },
        ex =>
        {
            _errorLogger.ProcessError(GetType().Name, MethodBase.GetCurrentMethod().Name, ErrorSource.Observable, "", -1, ex);
        }
        );
    client.GetContactByIdAsync(contactid, UserInformation.SecurityToken);
}
catch (Exception ex)
{
    _errorLogger.ProcessError(GetType().Name, MethodBase.GetCurrentMethod().Name, ErrorSource.Code, "", -1, ex);
}

Ahora quiero construir pruebas unitarias (sí, no es TDD). Pero no entiendo por dónde empezar. Con Moq no puedo burlarme del BlahServiceClient. Además, ninguna interfaz generada por svcutil puede ayudar porque los métodos asíncronos no forman parte de la interfaz IBlahService generada automáticamente. Es posible que prefiera extender (a través de clases parciales, etc.) cualquiera de las clases generadas automáticamente, pero no me gustaría optar por crear manualmente todo el código que svcutil puede generar (considerando francamente el tiempo y el presupuesto).

¿Puede ayudarme alguien, por favor? Cualquier puntero en la dirección correcta me ayudaría mucho.

Respuestas a la pregunta(1)

Su respuesta a la pregunta