Isso pode ser ridicularizado com Moq?

Eu estou trabalhando em zombar de algumas dependências externas e estou tendo problemas com uma classe de terceiros que toma em seu construtor uma instância de outra classe de terceiros. Espero que a comunidade de SO possa me dar alguma direção.

Eu quero criar uma instância simulada deSomeRelatedLibraryClass que leva em seu construtor uma instância simulada deSomeLibraryClass. Como posso zombarSomeRelatedLibraryClass deste jeito?

O código do repo ...

Aqui está um método principal que estou usando no meu aplicativo de console de teste.

public static void Main()
{
    try
    {
        SomeLibraryClass slc = new SomeLibraryClass("direct to 3rd party");
        slc.WriteMessage("3rd party message");
        Console.WriteLine();

        MyClass mc = new MyClass("through myclass");
        mc.WriteMessage("myclass message");
        Console.WriteLine();

        Mock<MyClass> mockMc = new Mock<MyClass>("mock myclass");
        mockMc.Setup(i => i.WriteMessage(It.IsAny<string>()))
            .Callback((string message) => Console.WriteLine(string.Concat("Mock SomeLibraryClass WriteMessage: ", message)));

        mockMc.Object.WriteMessage("mock message");
        Console.WriteLine();
    }
    catch (Exception e)
    {
        string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
        Console.WriteLine(error);
    }
    finally
    {
        Console.Write("Press any key to continue...");
        Console.ReadKey();
    }
}

Aqui está uma classe que eu usei para envolver uma classe de terceiros e permitir que ela seja Moq'd:

public class MyClass
{
    private SomeLibraryClass _SLC;

    public MyClass(string constructMsg)
    {
        _SLC = new SomeLibraryClass(constructMsg);
    }

    public virtual void WriteMessage(string message)
    {
        _SLC.WriteMessage(message);
    }
}

Aqui estão dois exemplos de classes de terceiros com as quais estou trabalhando (VOCÊ NÃO PODE EDITAR ESTES):

public class SomeLibraryClass
{
    public SomeLibraryClass(string constructMsg)
    {
        Console.WriteLine(string.Concat("SomeLibraryClass Constructor: ", constructMsg));
    }

    public void WriteMessage(string message)
    {
        Console.WriteLine(string.Concat("SomeLibraryClass WriteMessage: ", message));
    }
}

public class SomeRelatedLibraryClass
{
    public SomeRelatedLibraryClass(SomeLibraryClass slc)
    {
        //do nothing
    }

    public void WriteMessage(string message)
    {
        Console.WriteLine(string.Concat("SomeRelatedLibraryClass WriteMessage: ", message));
    }
}

questionAnswers(2)

yourAnswerToTheQuestion