ShimNotSupportedException in MS VisualStudio 2012

Ich versuche nur, mich mit dem neuen Fakes Isolation Framework in Visual Studio 2012 RC vertraut zu machen, stehe aber folglich vor Problemen mitShimNotSupportedExceptions.
Bei den ersten Versuchen hatte jede einzelne Shim-Methode, an die ich einen Delegierten anschließen wollte, eine geworfenShimNotSupportedException beim Versuch, den Test auszuführen / zu debuggen.

[TestMethod]
public void GetFoo_ValidBar_ReturnsBaz()
{
    using(ShimsContext.Create())
    {
        ShimDateTime.NowGet = () => new DateTime(2012,08,11,10,20,59);

        const string expected = "20120811_102059";
        string actual = GetFoo();

        Assert.AreEqual(expected,actual);
    }
} 

Dies ist der entsprechende Stack-Trace:

Die GetFoo_ValidBar_ReturnsBaz-Testmethode hat eine Ausnahme ausgelöst: Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException: System.DateTime bei Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime (Microsoft.Tvoke.Unit) Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.OnAttachedUnsupportedMethod (MethodBase-Methode) bei Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation (MethodBase-Methode) bei Microsoft.QualityToolTest.Test method, Delegate detourDelegate) bei Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour (Object optionalReceiver, MethodBase method, Delegate detourDelegate) bei Microsoft.QualityTools.Testing.Fakes.Shims.ShimTools.Testing MethodBase-Methode) bei Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim (Delegieren von optionalStub, Typ receiverType, Objekt optionalReceiver, Zeichenfolgename, ShimBinding-Flags, Typ returnType, Typ [] parameterTypes) bei Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime .SetShimPublicStatic (Delegate optionalStub, Typ receiverType, String name, Typ returnType, Typ [] parameterTypes) bei System.Fakes.ShimDateTime.set_NowGet (Func'1-Wert) bei GetFoo_ValidBar_ReturnsBaz () in BazTests.cs: Zeile 48.

Nachdem ich die beiden Threads gelesen hatte, die ich bei MSDN gefunden hatte, befolgte ich deren Anweisungen (CodeCoverage deaktivieren, .testsettings-Datei löschen), die für mich nicht funktionierten!
Trotzdem habe ich eine Problemumgehung für dieses Problem gefunden:
Wenn Sie zuerst alle Tests im Test Explorer ausführen (anstatt die Schaltfläche "MSTest Test (click to run)" direkt aus dem Codierungsbereich zu verwenden), hat alles ordnungsgemäß funktioniert und es wurden keine Ausnahmen ausgelöst. Danach konnte ich sogar den Test debuggen und die Zuordnung zur Shim-Methode funktionierte wie erwartet.
Dies funktionierte auch für alle folgenden Shims, die ich verwendet habe.
Aber jetzt habe ich wieder das gleiche Problem, wenn ich versuche, Fälschungen der MS Enterprise Library für den Datenbankzugriff zu implementieren.

So sieht der Test aus:

[TestMethod]
public void GetFooFromEF_NonEmptyDataReader_ObjectsCorrectlyInstantiated()
{
    using(ShimsContext.Create()){
        var dataReader = new StubIDataReader()
            {
                ItemGetString = s => 1,
                DepthGet = () => 2
            };

        ShimFoo.GetBar = guid => dataReader;

        var bar = new StubIBar()
        {
            ConvertIBarToBaz = record => null
        };

        ShimQux.AllInstances.GetBar = (a, b) => bar;

        var dbFactory = new StubDbProviderFactory();
        var db = new StubDatabase("test", dbFactory);
        ShimDatabaseFactory.CreateDatabaseString = s => db;

        List<BarInformation> actual = accessor.InvokeStatic("GetBar",
                                                                new Object[] { }) as List<BarInformation>;
        Assert.IsTrue(true);
    }
}

Die ersten beiden Shim-Zuweisungen (ShimFoo & ShimQux) funktionieren wie erwartet. Aber ShimDatabaseFactory.CreateDatabaseString (das DatabaseFactory.CreateDatabase (string) veranlassen soll, eine Stub-Datenbank zurückzugeben, wenn versucht wird, eine neue Datenbankinstanz zu erstellen) löst erneut eine ShimNotSupportedException aus. Und ich kann einfach nicht herausfinden warum!
Hast du irgendwelche Ideen, was hier schief gelaufen ist?

Ich würde mich über jede Eingabe dazu freuen.

Vielen Dank,
Benjamin

Antworten auf die Frage(3)

Ihre Antwort auf die Frage