Sto solo provando a familiarizzare con il nuovo Fakes Isolation Framework in Visual Studio 2012 RC ma di conseguenza ho problemi con ShimNotSupportedException
s.
Al primo tentativo, ogni singolo metodo di shim a cui ho cercato di collegare un delegato, aveva lanciato un ShimNotSupportedException
durante il tentativo di eseguire/eseguire il debug del test.ShimNotSupportedException in 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);
}
}
Questa è la corrispondente stack:
Procedimento prova GetFoo_ValidBar_ReturnsBaz ha generato un'eccezione: Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException: System.DateTime a Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InvokeEvent (valore T, Azione1 eh) in Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.OnAttachedUnsupported Metodo (metodo MethodBase) a Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation (MethodBase metodo) a Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InternalAttachDetour (Object optionalReceiver, metodo MethodBase, delegato detourDelegate) a Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour (Object optionalReceiver, metodo MethodBase, delegato detourDelegate) a Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod (delegato optionalStub, oggetto optionalReceiver, Metodo MethodBase) in Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim (Delegato optionalStub, Tipo receiverType, oggetto optionalReceiver, String name, bandiere ShimBinding, Tipo returnType, digitare [] parameterTypes) a Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicStatic (Delegato optionalStub, Tipo receiverType, String name, Tipo returnType, digitare [] parameterTypes) al System.Fakes.ShimDateTime.set_NowGet (valore Func'1) a GetFoo_ValidBar_ReturnsBaz() in BazTests.cs: linea 48.
Dopo aver letto le due filettature Ho trovato a MSDN che si occupa di questo problema ho seguito le loro istruzioni (disattivando CodeCoverage, eliminando .testsettings f ile) che non ha funzionato per me!
Tuttavia, ho trovato una soluzione per questo problema:
Eseguendo tutti i test dall'esploratore di test (invece di utilizzare il pulsante "MSTest Test (clic per eseguire)" direttamente dall'area di codifica), tutto ha funzionato correttamente e no sono state lanciate eccezioni. Successivamente ho anche potuto eseguire il debug del test e l'assegnazione al metodo shim ha funzionato esattamente come previsto.
Questo ha funzionato per tutti i seguenti spessori che ho usato anch'io.
Ma ora sto riscontrando di nuovo lo stesso problema quando si tenta di implementare i falsi della libreria MS Enterprise per l'accesso al database.
Questo è ciò che il test si presenta come:
[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);
}
}
I primi due assegnazioni di spessore (ShimFoo & ShimQux) funzionino come previsto. Ma ShimDatabaseFactory.CreateDatabaseString (che dovrebbe rendere DatabaseFactory.CreateDatabase (string) restituisce un database stub quando si tenta di creare una nuova istanza di database) genera nuovamente una ShimNotSupportedException. E proprio non riesco a capire perché!
Hai qualche idea di cosa è andato storto qui?
Apprezzerei qualsiasi input su questo.
Grazie,
Benjamin
Solo un avvertimento, è necessario eseguire VS come amministratore. –