Kann dies mit Moq verspottet werden?

Ich arbeite daran, einige externe Abhängigkeiten zu verspotten, und habe Probleme mit einer Klasse von Drittanbietern, die im Konstruktor eine Instanz einer anderen Klasse von Drittanbietern aufnimmt. Hoffentlich kann mir die SO-Community eine Richtung geben.

Ich möchte eine Scheininstanz von erstellenSomeRelatedLibraryClass das nimmt in seinem Konstruktor eine Scheininstanz vonSomeLibraryClass. Wie kann ich mich lustig machen?SomeRelatedLibraryClass diesen Weg?

Der Repo-Code ...

Hier ist eine Hauptmethode, die ich in meiner Testkonsolenanwendung verwende.

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

Hier ist eine Klasse, die ich verwendet habe, um eine Klasse von Drittanbietern zu verpacken und zuzulassen, dass sie von Moq erstellt wird:

public class MyClass
{
    private SomeLibraryClass _SLC;

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

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

Hier sind zwei Beispiele für Klassen von Drittanbietern, mit denen ich arbeite (SIE KÖNNEN DIESE NICHT BEARBEITEN):

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage