Po prostu próbuję zapoznać się z nowym Fake Isolation Framework w Visual Studio 2012 RC, ale w konsekwencji napotykam problemy z ShimNotSupportedException
s.
Podczas pierwszej próby każda pojedyncza metoda shim, do której próbowałem podłączyć delegata, rzuciła ShimNotSupportedException
podczas próby uruchomienia/debugowania testu.ShimNotSupportedException w MS VisualStudio 2012
[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);
}
}
jest to odpowiednie ślad stosu:
GetFoo_ValidBar_ReturnsBaz sposób testu wyrzucane wyjątek: Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException: System.DateTime w Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InvokeEvent (Wartość T, Działanie 1 eh) w Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.OnAttachedUnsupported (Metoda MethodBase) w Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation (MethodBase metoda) w Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InternalAttachDetour (Przedmiot optionalReceiver metoda MethodBase, pełnomocnik detourDelegate) w Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour (Przedmiot optionalReceiver metoda MethodBase, pełnomocnik detourDelegate) w Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod (Delegat optionalStub, obiekt optionalReceiver, Metoda MethodBase) w Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim (Delegat optionalStub, Type receiverType, Object optionalReceiver, Nazwa ciągu, Flagi ShimBinding, Typ returnType, Typ [] parameterTypes) w Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicStatic (Delegat optionalStub, Typ receiverType, Nazwa ciągu, returnType typ, typ [] parameterTypes) w System.Fakes.ShimDateTime.set_NowGet (wartość Func'1) w GetFoo_ValidBar_ReturnsBaz() w BazTests.cs: linia 48.
po przeczytaniu dwa wątki Znalazłem na MSDN zajmujące się tym problemem Postępowałem zgodnie z ich instrukcjami (wyłączanie CodeCoverage, usuwanie .testsettings f ile), które nie działa dla mnie!
Mimo to znalazłem obejście tego problemu:
Najpierw uruchamiając wszystkie testy z Eksploratora testów (zamiast przycisku "Test MSTest (kliknij, aby uruchomić)" bezpośrednio z obszaru kodowania) wszystko działało poprawnie i nie wyjątki zostały odrzucone. Potem mogłem nawet zdebugować test, a przypisanie do metody shim działało zgodnie z oczekiwaniami.
To działało dla wszystkich poniższych podkładek, których również użyłem.
Ale teraz mam ten sam problem ponownie podczas próby wprowadzenia podróbek MS Enterprise Library w celu uzyskania dostępu do bazy danych.
To właśnie test wygląda następująco:
[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);
}
}
Pierwsze dwa zadania podkładka (ShimFoo & ShimQux) pracują zgodnie z oczekiwaniami. Ale ShimDatabaseFactory.CreateDatabaseString (który ma zrobić DatabaseFactory.CreateDatabase (string) zwraca bazę danych przy próbie utworzenia nowej instancji bazy danych) ponownie rzuca wyjątek ShimNotSupportedException. I nie mogę pojąć dlaczego!
Czy masz jakieś pomysły, co poszło nie tak?
Byłbym wdzięczny za wszelkie dane wejściowe.
Dzięki
Benjamin
Tylko zastrzeżenie, trzeba uruchomić VS jako administrator. –