Wie zu verwenden moq, um test-code, der fordert, geschützt Helfer

Ich derzeit laufen tests, die wie folgt Aussehen:

//In Blah.cs
public class ClassUnderTest

{

    public bool MethodUnderTest()

    {

        //Do a bunch of stuff...

        return HelperMethod();

    }



    protected virtual bool HelperMethod()

    {

        bool success = false;

        //Proprietary Hardware Access.

        //Database Calls.

        //File System Modifications.

        return success;

    }

}


//In TestBlah.cs

public class TestStub : ClassUnderTest

{

    public bool HelperMethodReturnValue;



    protected override bool HelperMethod()

    {

        return HelperMethodReturnValue;

    }

}



[TestClass]

public class TestingClass

{

    [TestMethod]

    public void ClassUnderTest_MethodUnderTest_TestHelperReturnsTrue()

    {

        var stub = new TestStub();

        stub.HelperMethodReturnValue = true;

        Assert.IsTrue(stub.MethodUnderTest());

    }



    [TestMethod]

    public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()

    {

        var stub = new TestStub();

        stub.HelperMethodReturnValue = false;

        Assert.IsFalse(stub.MethodUnderTest());

    }

}

Den oben genannten sieht gut für einfache Sachen, allerdings die stub-Klasse wird exponentiell größer und komplexer schnell.
Ich würde gerne ersetzen die stub-Klasse mit Moq. Aber dieser Code wird nicht kompiliert, da aus irgendeinem Grund kann ich nicht den return Wert auf eine protected-Methode.

[TestMethod]

public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()

{

    var mockClass = new Mock<ClassUnderTest>();
    mockClass.Protected().Setup("HelperMethod").Returns(false);

    Assert.IsFalse(mockClass.Object.MethodUnderTest());

}

Jemand weiß, wie ich gehen würde, über das tun dies? Kann ich dies mit moq?

  • Etwas scheint nicht hier... Sie verspotten Sie nicht Ihr LET, Sie zu verspotten, Ihre Abhängigkeiten.
  • Ja, eigentlich Yojin spottet der SUT ersetzen einen Teil des SUT, die getrennt werden sollten, nicht in einem geschützten Helfer-Methode.
InformationsquelleAutor WhiteleyJ | 2011-10-21
Schreibe einen Kommentar