Czy można to wyśmiać z Moq?

Pracuję nad drwinami z zewnętrznych zależności i mam problem z jedną klasą innej firmy, która zajmuje się konstruktorem instancji innej klasy innej firmy. Mam nadzieję, że społeczność SO może dać mi jakiś kierunek.

Chcę utworzyć próbną instancjęSomeRelatedLibraryClass który zajmuje się konstruktorem fałszywą instancjąSomeLibraryClass. Jak mogę drwićSomeRelatedLibraryClass tą drogą?

Kod repo ...

Oto główna metoda, której używam w aplikacji testowej konsoli.

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();
    }
}

Oto klasa, której użyłem, aby zawinąć jedną klasę trzeciej strony i pozwolić jej być 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);
    }
}

Oto dwa przykłady klas innych firm, z którymi pracuję (NIE MOŻESZ EDYTOWAĆ TEJ):

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