c# sql-server unit-testing nunit resharper

c# - ¿Cómo ejecutar dispositivos de prueba NUnit en serie?



sql-server unit-testing (4)

A menos que el código que se está probando haga su propia gestión de transacciones, puede ejecutar cada prueba dentro de una transacción. De esa manera, las diferentes pruebas no se molestarán entre sí. Además, no tiene que preocuparse por la limpieza después de cada prueba, ya que la transacción de cada prueba puede abortarse una vez que se complete la prueba.

En nuestros proyectos, generalmente permitimos que nuestras pruebas de integración se deriven de una clase que se parece más o menos así:

public class TransactionalTestFixture { private TransactionScope TxScope; [SetUp] public void TransactionalTestFixtureSetUp() { TxScope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions {IsolationLevel = IsolationLevel.Serializable}); } [TearDown] public void TransactionalTestFixtureTearDown() { TxScope.Dispose(); } }

Tengo varias suites de pruebas de integración implementadas en C # / NUNit. Cada conjunto de prueba es una clase independiente, la configuración de cada dispositivo crea y llena una base de datos de SQL Server a partir de scripts. Todo esto solía funcionar bien antes de Resharper 5.1.

Desafortunadamente, Resharper 5.1 comienza a ejecutar varios dispositivos al mismo tiempo. Este es un cambio importante: todos intentan crear y completar la misma base de datos, lo que obviamente termina en un lío. ¿Hay alguna manera de que Resharper pueda ejecutar mis dispositivos de prueba en serie?

Si no es así, ¿qué sugeriría que ejecutara mis dispositivos de prueba NUnit en serie, un dispositivo a la vez? El orden en que se ejecutan las pruebas individuales no importa.


Dales nombres alfabéticos, es decir, prefiéstalos con una letra que represente su orden de ejecución. Si necesita que esto suceda, también debería poder aceptar esta asquerosa convención de nomenclatura.


Estas seguro acerca de esto ? Acabo de probar esto ... poniendo un rastro del siguiente formulario en las pruebas en 3 unidades NUnit de diferencias seguidas de "Ejecutar todo". No parece estar corriendo en paralelo.

Trace.WriteLine(DateTime.Now.ToString("hh:mm:ss.ffff") + "VC:Start"); Trace.WriteLine(DateTime.Now.ToString("hh:mm:ss.ffff") + "VC:Done");

La salida que veo es: (R # Build 5.1.1753.1)

01:06:41.6639IOC 01:06:41.6649Done - IOC 01:06:41.6679VC:Start 01:06:41.6729VC:Done 01:06:41.2439Mef 01:06:41.6589Mef-Done


No sé si es posible evitar que ReSharper ejecute pruebas en paralelo; de lo contrario, el siguiente truco podría funcionar: Cree una clase estática con un miembro de Monitor lectura estática. Luego, en [TestFixtureSetUp] , llame a Enter() en el monitor, y llame a Exit() en el monitor en [TestFixtureTearDown] . De esa manera, solo un dispositivo de prueba podrá ejecutarse a la vez. Aunque no es bonita ...