2012-07-24 12 views
5

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

+0

Tylko zastrzeżenie, trzeba uruchomić VS jako administrator. –

Odpowiedz

4

miałem dokładnie taki sam problem. Spróbuj usunąć wszystkie pliki testsettings (zarówno z dysku i rozwiązania), i upewnij się, że twoje rozwiązanie nie odwołuje się do żadnych plików zestawu testowego.

Upewnij się również, że używasz programu testowego programu Visual Studio (a nie programu Resharper itp., Który obsługuje instrumentowanie kodu).

pisałem dwa blogposts o tych sprawach, które mogą być pomocne:

Visual Studio 2012 Fakes – ShimNotSupportedException when debugging tests

Unit testing – Visual Studio 2012 Fakes in Team City

+0

ReSharper był problemem dla mnie. – MasterMastic

1

widziałem ten błąd kilka razy z różnych przyczyn:

  • Występuje błąd lub problem w plikach generowania fałszywych plików, niektóre z nich nie są poprawnie generowane. Oczyść katalogi i przerób swoje fałszywe referencje.
  • Brakuje dll zależnego. W tym przypadku brakuje biblioteki dll, od której zależy dll podróbki. W jednym przypadku zmieniłem serwis WWW i nie mam dll System.ServiceModel.
  • Czasami można to naprawić zmieniając domyślny procesor architektury architecure. Jednak nie wiem dlaczego, prawdopodobnie odświeży niektóre biblioteki DLL.
Powiązane problemy