Estoy tratando de familiarizarme con el nuevo marco de aislamiento de falsificaciones en Visual Studio 2012 RC pero, en consecuencia, estoy enfrentando problemas con ShimNotSupportedException
s.
En los primeros intentos, cada método de shim único en el que intenté conectar un delegado, había arrojado un ShimNotSupportedException
cuando intentaba ejecutar/depurar la prueba.ShimNotSupportedException en 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);
}
}
Este es el correspondiente seguimiento de la pila:
El método prueba GetFoo_ValidBar_ReturnsBaz ha lanzado una excepción: Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException: System.DateTime en Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InvokeEvent (valor T, Acción1 eh) en Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.OnAttachedUnsupported Método (método MethodBase) en Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation (MethodBase método) en Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InternalAttachDetour (Object optionalReceiver, método MethodBase, Delegado detourDelegate) en Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.AttachDetour (Object optionalReceiver, método MethodBase, Delegado detourDelegate) en Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod (Delegado optionalStub, objeto optionalReceiver, Método MethodBase) en Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim (Delegado optionalStub, Tipo receiverType, optionalReceiver objeto, String nombre, banderas ShimBinding, Tipo returnType, el tipo parameterTypes []) en Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimPublicStatic (Delegado optionalStub, Tipo receiverType, String nombre, Llene returnType, escriba [] parameterTypes) en System.Fakes.ShimDateTime.set_NowGet (valor Func'1) en GetFoo_ValidBar_ReturnsBaz() en BazTests.cs: la línea 48.
Después de haber leído los dos hilos Encontré en MSDN lidiando con este problema, seguí sus instrucciones (desactivando CodeCoverage, eliminando .testsettings f ile) que no funcionó para mí!
Sin embargo, he encontrado una solución para este problema:
Ejecutando todas las pruebas desde el Explorador de prueba (en lugar de utilizar el botón "Prueba MSTest (haga clic para ejecutar)" directamente fuera del área de codificación) todo funcionó correctamente y no se lanzaron excepciones Después, incluso pude depurar la prueba y la asignación al método shim funcionó tal como se esperaba.
Esto funcionó para todas las cuñas siguientes que utilicé también.
Pero ahora estoy teniendo el mismo problema otra vez cuando intento implementar falsificaciones de MS Enterprise Library para acceder a la base de datos.
Esto es lo que la prueba se ve así:
[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);
}
}
Las dos primeras asignaciones cuña (ShimFoo & ShimQux) están trabajando como se esperaba. Pero ShimDatabaseFactory.CreateDatabaseString (que se supone que hace DatabaseFactory.CreateDatabase (string) devuelve una base de datos stub cuando intenta crear una nueva instancia de base de datos) arroja una excepción ShimNotSupportedException nuevamente. ¡Y no puedo entender por qué!
¿Tiene alguna idea de lo que salió mal aquí?
Agradecería cualquier comentario sobre esto.
Gracias, Benjamin
Sólo una advertencia, es necesario ejecutar VS como administrador. –