Unit-test-protected-Methode in C# mit Moq

Es kam, um meine Aufmerksamkeit in letzter Zeit, dass Sie können unit-test-abstrakte Basis-Klassen mit Moq anstatt eine dummy-Klasse im test, die die abstrakte Basis-Klasse. Sehen Wie zu verwenden moq testen eine konkrete Methode in eine abstrakte Klasse? E. g. Sie tun kann:

public abstract class MyAbstractClass 
{
    public virtual void MyMethod()
    {
        //...    
    }
}

[Test]
public void MyMethodTest()
{
    //Arrange            
    Mock<MyAbstractClass> mock = new Mock<MyAbstractClass>() { CallBase = true };

    //Act
    mock.Object.MyMethod();

    //Assert
    //... 
}

Nun ich Frage mich, ob es eine ähnliche Technik, mir zu erlauben, test protected-Elemente ohne das erstellen einer wrapper-Klasse. I. e. wie testen Sie diese Methode:

public class MyClassWithProtectedMethod
{
    protected void MyProtectedMethod()
    {

    }
}

Ich bin mir dessen bewusst, das Moq.Geschützt namespace, aber soweit ich es sehen kann, können Sie nur die setup-Erwartungen mit z.B.

mock.Protected().Setup("MyProtectedMethod").Verifiable();

Ich bin mir auch bewusst, dass die offensichtliche Antwort ist hier "don' T test protected-Methoden, nur zum testen public-Methoden", aber das ist eine andere Debatte! Ich will nur wissen ob dies möglich ist, mit Moq.

Update: unten ist, wie würde ich dies testen, in der Regel:

public class MyClassWithProtectedMethodTester : MyClassWithProtectedMethod
{
    public void MyProtectedMethod()
    {
        base.MyProtectedMethod();
    }
}

Vielen Dank im Voraus.

Ist es das was Ihr wollt?
Bin wirklich Fragen, warum es keine .Returns(..) für die .Setup(...)- link zur API-doc scheint kaputt zu sein und ich habe keine VS um jetzt - Sie sicher, dass keine Rückkehr? - bzlms post scheint darauf hinzudeuten, dass es ist/war einer...
Nein, das ist das gleiche wie das, was ich oben geschrieben habe, es können Sie erwarten, dass die protected-Methode aufgerufen wird. Ich möchte eigentlich führen die geschützte Methode von test. I. e. Ich möchte das ändern der Zugänglichkeit der geschützten Methode, um öffentlichkeit für Testzwecke, was ich tun kann, mit einer wrapper-Klasse.

InformationsquelleAutor magritte | 2011-10-10

Schreibe einen Kommentar