.net - tutorial - Cambio entre el uso de NUnit y MSTest para pruebas de unidad
unit test c# ejemplo (3)
¿Cómo puedo configurar una solución .NET (C #, .NET 2.0) para permitir que otros desarrolladores hagan uso de las mismas pruebas unitarias para la solución usando NUnit o MSTest?
Fondo:
En este proyecto, algunos desarrolladores utilizan VS2005 Team Edition y otros utilizan VS2005 Pro, por lo que no todos los desarrolladores pueden ejecutar MSTest. Dado que este es un proyecto Enterprise, el equipo no puede hacer uso de TestDriven.net o ReSharper. Estoy consciente de que el uso de cualquiera de estos productos con VS resolvería este problema, pero dado el tiempo que tomaría para autorizar la compra de licencias, la compra de cualquiera de estos productos no es una opción viable.
Gracias de antemano por su ayuda, MagicAndi.
¿Tienes una mezcla de pruebas existentes? Si no, o si no te importa convertir MSTest existentes, estandarizaría en NUnit. Yo prefiero NUnit sobre MSTest; es más rápido y no te obliga a tener el sin sentido TestContext en tus clases de prueba. También es más compatible con los servidores de CI.
La mejor solución que he encontrado es hacer uso de un simple fragmento de código que encontré en este article . Simplemente use este fragmento de código en la sección de espacio de nombres de cada archivo de prueba .cs:
#if NUNIT
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute;
using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute;
#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
#endif
using NUnitAssert = NUnit.Framework.Assert;
using MsAssert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
El NUNIT
en el fragmento de código se refiere a una configuración de compilación personalizada para la solución. Puede crear esto utilizando el Administrador de configuración de VS (a través de la barra de herramientas de VS o las propiedades de la solución). Además, debe reemplazar todas las instancias del atributo de prueba de NUnit en sus métodos para hacer uso del atributo MSTest TestMethod (o viceversa).
EDITAR: se actualizó el fragmento de código anterior para incluir una posible solución al problema que Jamie Ide señaló en los comentarios. Nota, no he logrado probar esta solución. El fragmento de código actualizado se tomó de un comentario de Simon en esta publicación del blog .
Si no desea cambiar ningún código de prueba (es decir, no desea agregar el alias en la parte superior), este shim funciona para mí:
using System;
using System.Collections;
namespace Microsoft.VisualStudio.TestTools.UnitTesting
{
public class Placeholder{}
public class TestClassAttribute : NUnit.Framework.TestFixtureAttribute
{
}
public class TestInitializeAttribute : NUnit.Framework.SetUpAttribute
{
}
public class TestMethodAttribute : NUnit.Framework.TestAttribute
{
}
public class TestCleanupAttribute : NUnit.Framework.TearDownAttribute
{
}
public class IgnoreAttribute : NUnit.Framework.IgnoreAttribute
{
}
public class ExpectedExceptionAttribute : NUnit.Framework.ExpectedExceptionAttribute
{
public ExpectedExceptionAttribute(Type exceptionType) : this(exceptionType, null)
{
}
public ExpectedExceptionAttribute(Type exceptionType, string message) : base(exceptionType)
{
UserMessage = message;
}
}
public class TestContext : NUnit.Framework.TestContext
{
public TestContext(IDictionary dictionary) : base(dictionary)
{
}
}
public class Assert : NUnit.Framework.Assert
{
public static void IsInstanceOfType(object obj, Type type)
{
NUnit.Framework.Assert.IsInstanceOfType (type, obj, null);
}
public static void IsInstanceOfType(object obj, Type type, string message)
{
NUnit.Framework.Assert.IsInstanceOfType (type, obj, message);
}
}
}
Esto me ha funcionado para ejecutar MSTest a través de NUnit (al menos bajo mono con Xamarin Studio). Solo incluya el archivo y obtenga las referencias correctas (es posible que necesite un archivo de proyecto diferente o referencias condicionales ), y está bien.