Исключение ShimNotSupportedException в MS VisualStudio 2012

Я просто пытаюсь ознакомиться с новой инфраструктурой изоляции подделок в Visual Studio 2012 RC, но, следовательно, у меня возникают проблемы с ShimNotSupportedExceptions.
При первых попытках каждый отдельный метод прокладки, к которому я пытался подключить делегата, выдавал ShimNotSupportedExceptionпри попытке запустить/отладить тест.

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

Это соответствующая трассировка стека:

The GetFoo_ValidBar_ReturnsBaz test method has thrown an exception: Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException: System.DateTime at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InvokeEvent(T value, Action1 eh) at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.OnAttachedUnsupportedMethod(MethodBase method) at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation(MethodBase method) at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InternalAttachDetour(Object optionalReceiver, MethodBase method, Delegate detourDelegate) at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour(Object optionalReceiver, MethodBase method, Delegate detourDelegate) at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod(Delegate optionalStub, Object optionalReceiver, MethodBase method) at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim(Delegate optionalStub, Type receiverType, Object optionalReceiver, String name, ShimBinding flags, Type returnType, Type[] parameterTypes) at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicStatic(Delegate optionalStub, Type receiverType, String name, Type returnType, Type[] parameterTypes) at System.Fakes.ShimDateTime.set_NowGet(Func'1 value) at GetFoo_ValidBar_ReturnsBaz() in BazTests.cs: line 48.

После прочтения двух тем, которые я нашел в MSDN, посвященных этой проблеме, я последовал их инструкциям (, отключив CodeCoverage, удалив файл.testsettings ), что не сработало для меня!
Тем не менее, я нашел решение этой проблемы:
При первом запуске всех тестов из обозревателя тестов (вместо использования кнопки «MSTest Test (нажмите кнопку для запуска )» непосредственно из области кодирования )все работало правильно, и никаких исключений не возникало. После этого я даже смог отладить тест, и назначение метода прокладки сработало, как и ожидалось.
Это сработало и для всех последующих прокладок, которые я использовал.
Но теперь у меня снова возникает та же проблема, когда я пытаюсь внедрить подделки MS Enterprise Library для доступа к базе данных.

Так выглядит тест:

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

Первые два назначения прокладок (ShimFoo и ShimQux )работают должным образом. Но ShimDatabaseFactory.CreateDatabaseString (, который должен заставить DatabaseFactory.CreateDatabase (string )возвращать базу данных-заглушку при попытке создать новый экземпляр базы данных ), снова выдает исключение ShimNotSupportedException. И я просто не могу понять, почему!
Есть идеи, что здесь пошло не так?

Я был бы признателен за любой вклад в это.

Спасибо,
Бенджамин

5
задан Ben Sch 13 September 2014 в 18:15
поделиться