visual unit test studio net ejemplo c# unit-testing tfs mstest

c# - unit - Cómo establecer la categoría de prueba para todas las pruebas en la clase



unit test.net core (6)

El objetivo final es omitir las pruebas de integración durante la ejecución de prueba en el registro de TFS.

Hay otras formas de hacer esto. En sus compilaciones TFS, puede establecer qué pruebas de unidad desea ejecutar, según el nombre de su ensamblaje .

Como comportamiento predeterminado, ejecutará todas las pruebas unitarias en ensamblajes que tengan "prueba" en su nombre. Una solución simple sería cambiar el nombre de las pruebas de integración a algo que no incluya "prueba".

Si desea utilizar las categorías , puede intentar usar AOP. Por ejemplo, con Postsharp, puede crear un aspecto en su conjunto de prueba de integración que coloca el atributo en el método . Luego habilite el aspecto para todos los métodos públicos en su ensamblaje de integración si todas las pruebas se agrupan en una dll o en cada clase de prueba de integración.

Estoy usando MSTest y quiero establecer la misma categoría de prueba para todos los métodos en la clase de prueba a la vez, sin configurar el atributo TestCategory para cada método individualmente. ¿Cómo se puede hacer esto?

La forma más conveniente y obvia sería establecer el atributo TestCategory en la clase, pero solo se puede aplicar a los métodos.

El objetivo final es omitir las pruebas de integración durante la ejecución de prueba en el registro de TFS.


En VS 2017 esto es posible (y parece ser parte de la actualización 1 de VS2012 ).

Puede poner [TestCategory ("Integración")] en una clase en su prueba de unidad y hacer que se aplique a todas las pruebas, y de la misma manera [TestCategory ("Unidad")] en sus clases de prueba de unidad.

Luego, puede usar la barra de búsqueda del Explorador de pruebas para filtrar por Nombre de rasgo = Unidad y "Ejecutar todo" solo ejecutará las pruebas que coincidan con su búsqueda.

Cuando vaya a ejecutar estas pruebas en su servidor de compilación, puede usar un switch como / category: Unit para ejecutar solo las pruebas de unidad.


He estado buscando hacer algo similar, y he llegado a una solución que funciona muy bien para mis propósitos.

Esto no resuelve el problema de aplicar una TestCategory por clase, pero puede usar el argumento de la línea de comando /test: para que mstest especifique una cadena de búsqueda que coincida con cualquier parte del nombre del método completamente calificado de la prueba. Eso significa que generalmente puede coincidir con la clase, el espacio de nombres o cualquier cadena de búsqueda a la que pueda llegar que coincida con las pruebas de destino. Y si eso no lo hace, puedes usar el argumento /test: varias veces. Es decir:

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace /test:My.FullyQualified.OtherNamespace.OtherClass

Más información



Puede agruparse por "Nombre de clase" en el panel del Explorador de pruebas.

Con el atributo TestCategory no puede resolver su problema solo porque los atributos en C # son metadatos y no se pueden usar como valores dinámicos.


Una forma de evitar esta limitación es poner la categoría de prueba al comienzo de cada método de prueba. Por ejemplo, nombra tus pruebas unitarias

public void UnitTestDoSomething_ExpectThis()

y tu prueba de integración

public void IntegrationTestDoSomething_ExpectThis()

Luego, cuando haga su consulta TFS para obtener las pruebas de integración que puede hacer

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

Aunque esta no es una solución perfecta, le ayudará a distinguir sus pruebas en código y TFS. Alternativamente, puedes mirar el área y las rutas de iteración.